2013-10-05 26 views
11

Próbuję przeskalować obiekt SKSpriteNode bez wygładzania/wygładzania (używam pixel-art, więc wygląda lepiej pikselowo).Jak skalować SKSpirteNode bez anty-aliasingu

Czy jest właściwość, którą muszę ustawić, aby to zrobić? Jest to kod używam do renderowania ikonki:

SKTextureAtlas *atlas = [SKTextureAtlas atlasNamed:@"objects"]; 
SKTexture *f1 = [atlas textureNamed:@"hero_1.png"]; 

SKSpriteNode *hero = [SKSpriteNode spriteNodeWithTexture:f1]; 
[self addChild: hero]; 

hero.scale = 6.0f; 

obraz jest skalowany prawidłowo ale rozmazane/wygładzone. To jest hero_1.png enter image description here.

Odpowiedz

17

spróbować

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

Każdy piksel jest rysowany za pomocą najbliższy punkt w fakturze. Ten tryb jest szybszy, ale wyniki są często pikselowane.

Swift:

sprite.texture!.filteringMode = .Nearest 
+0

to nie jest prope rty skspritenode. –

+0

możesz dodać sprite do pytania, więc mogę wypróbować kilka rzeczy – DogCoffee

+0

dodałem do pytania –

3

Tylko uwaga, jeśli tworzysz SKSpriteNode zamiast SKTexture, można ustawić SKTextureFilteringNearest jak w poniższym przykładzie:

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]; 
0

spróbuj tego:

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