如何在没有抗锯齿的情况下缩放SKSpriteNode

时间:2013-10-05 01:22:06

标签: ios objective-c textures sprite-kit

我正在尝试缩放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 enter image description here

3 个答案:

答案 0 :(得分:17)

尝试,

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

     

使用纹理中最近的点绘制每个像素。这种模式   更快,但结果通常是像素化的。

夫特:

sprite.texture!.filteringMode = .Nearest

答案 1 :(得分:3)

请注意,如果您创建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];

答案 2 :(得分:0)

试试这个:

hero.xscale = 6.0f;
hero.yscale = 6.0f;