Как вы масштабируете SKSpirteNode без сглаживания
Я пытаюсь масштабировать объект SKSpriteNode без сглаживания/сглаживания (я использую пиксельное искусство, поэтому он выглядит лучше пикселированным).
Есть ли свойство, которое мне нужно установить для этого? Это код, который я использую для визуализации спрайта:
SKTextureAtlas *atlas = [SKTextureAtlas atlasNamed:@"objects"];
SKTexture *f1 = [atlas textureNamed:@"hero_1.png"];
SKSpriteNode *hero = [SKSpriteNode spriteNodeWithTexture:f1];
[self addChild: hero];
hero.scale = 6.0f;
Изображение масштабируется правильно, но размыто/сглажено. Это hero_1.png
.
Ответы
Ответ 1
Попробуйте,
SKTexture *texture = [SKTexture textureWithImageNamed:@"Fak4o"];
texture.filteringMode = SKTextureFilteringNearest;
SKSpriteNode *newHero = [SKSpriteNode spriteNodeWithTexture:texture];
newHero.position = CGPointMake(200, 200);
[newHero setScale:50];
[self addChild:newHero];
SKTextureFilteringNearest
Каждый пиксель рисуется с использованием ближайшей точки в текстуре. Этот режим быстрее, но результаты часто имеют пиксели.
Swift:
sprite.texture!.filteringMode = .Nearest
Ответ 2
Просто заметьте, если вы создаете SKSpriteNode
вместо SKTexture
, вы можете установить SKTextureFilteringNearest
как в следующем примере:
SKSpriteNode *asteroid = [SKSpriteNode spriteNodeWithImageNamed:@"o1"];
asteroid.size = CGSizeMake(36, 24);
asteroid.position = CGPointMake(startX, startY);
asteroid.name = @"obstacle";
// >>>
asteroid.texture.filteringMode = SKTextureFilteringNearest;
// <<<
[self addChild:asteroid];
Ответ 3
попробуйте следующее:
hero.xscale = 6.0f;
hero.yscale = 6.0f;