2014-06-06 24 views
17

Próbuję narysować pojedyncze koło w projekcie iOS SpriteKit, ale brzegi koła nie są gładkie. Chciałbym mieć ładnie narysowane kółko, tak jakbym rysował w Photoshopie (anti-aliasing). Znalazłem kilka podobnych pytań, ale mój problem pozostaje.Rysowanie gładkiego koła w zestawie sprite iOS

-(id)initWithSize:(CGSize)size 
{ 
    if (self = [super initWithSize:size]) 
    { 
     self.backgroundColor = [SKColor whiteColor]; 
     self.scaleMode = SKSceneScaleModeAspectFill; 
     self.size = CGSizeMake(640, 1136); 

     CGRect circle = CGRectMake(100.0, 100.0, 80.0, 80.0); 
     SKShapeNode *shapeNode = [[SKShapeNode alloc] init]; 
     shapeNode.path = [UIBezierPath bezierPathWithOvalInRect:circle].CGPath; 
     shapeNode.fillColor = [SKColor redColor]; 
     shapeNode.lineWidth = 0; 
     [self addChild:shapeNode]; 
    } 
    return self; 
} 

Co tu jest?

+1

Myślę, że musisz nadać węzłowi wartość liniiWidth większą niż 0. Antyaliasing jest domyślnie włączony, ale myślę, że dotyczy to tylko linii, a nie wypełnienia. – gabuh

+3

Nawiasem mówiąc, antyaliasing SKShapeNode nie jest zbyt dobry, przynajmniej w testach, które zrobiłem jakiś czas temu, skończyłem tworzyć SKSpriteNodes z normalnymi obrazami. – gabuh

+0

@ Dziękuję :). Ustawienie lineWidth = 5 wykonało lewę. Powinieneś opublikować to jako odpowiedź, aby zdobyć punkt :). Dzięki! – xpepermint

Odpowiedz

14

Funkcja wygładzania jest aktywowana domyślnie, ale dotyczy tylko linii, a nie wypełnienia.

Ustaw szerokość linii na liczbę większą niż 0 i spróbuj ponownie.

6

Ustaw właściwość antysyzmowa na TAK.

shapeNode.antialiased = YES; 

Chropowate krawędzie nie są widoczne podczas korzystania z kolorów wypełnienia.

//shapeNode.fillColor = [SKColor redColor]; 
shapeNode.strokeColor =[SKColor redColor]; 
shapeNode.antialiased = YES; 
shapeNode.lineWidth = 1; 

Teraz przełącz się między TAK i NIE dla właściwości przeciwstawnych. Zauważysz różnicę.

Powiązane problemy