2009-03-27 20 views
19

Próbuję uzyskać kontrolę nad Cocos2d próbując osiągnąć proste rzeczy. W tym momencie mam scenę, ta scena ma ikonkę tła i warstwę. Próbuję narysować na warstwie za pomocą drawLine. Oto moja obecna próba.Jak narysować linię z Cocos2d-iPhone

@implementation MyLayer 
-(id)init{ 
    self = [super init]; 
    if(self != nil){ 
     glColor4f(0.8, 1.0, 0.76, 1.0); 
     glLineWidth(2.0f); 
     CocosNode *line = drawLine(10.0f, 100.0f,400.0f,27.0f); 
     [self addChild:line z:1]; 
    } 
    return self; 
} 
@end 

Który generuje błąd "nieważna wartość nie jest ignorowana tak jak powinna być". Więc oczywiście robię to źle, ale mam nadzieję, że widzisz moje rozumowanie.

Ja również próbowałem to

-(id)init{ 
    self = [super init]; 
    if(self != nil){ 
     glColor4f(0.8, 1.0, 0.76, 1.0); 
     glLineWidth(2.0f); 
     drawLine(10.0f, 100.0f,400.0f,27.0f); 
    } 
    return self; 
} 

Który nie daje mi błąd, ale to nie działa albo. Zdaję sobie sprawę, że nie rozumiem czegoś fundamentalnego, ale czy ktoś może kierować mną we właściwym kierunku?

Odpowiedz

22

Z Cocos2d drawPrimitivesTest.m:

- (void)draw { 
    // ... 

    // draw a simple line 
    // The default state is: 
    // Line Width: 1 
    // color: 255,255,255,255 (white, non-transparent) 
    // Anti-Aliased 
    glEnable(GL_LINE_SMOOTH); 
    ccDrawLine(ccp(0, 0), ccp(s.width, s.height)); 

    // ... 
} 
+0

Nic nie widzę po wklejeniu tych 2 wierszy do mojego pliku HelloWorldLayer.m. Propozycje? – quantumpotato

+0

Ah, umieszczenie ich w metodzie losowania warstwy, działa dobrze. Dzięki! – quantumpotato

+2

GL_LINE_SMOOTH nie jest obsługiwany w iOS OpenGL 2. http://www.cocos2d-iphone.org/forum/topic/31940 –

14

OK, wymyśliłem to dla każdego, kto jest zainteresowany. Oto kod z komentarzem wyjaśniającym, co robić.

@implementation GameLayer 
-(id)init{ 
    self = [super init]; 
    if(self != nil){ 
     // init stuff here  
    } 
    return self; 
} 

// You have to over-ride this method 
-(void)draw{ 
    glColor4f(0.8, 1.0, 0.76, 1.0); 
    glLineWidth(2.0f); 
    drawLine(10,100,50,79); 
}  
@end 

Zakładam więc, że metoda losowania zostanie wywołana przy każdej klatce.

+0

Nie działa dla mnie. drawLine (10,100,50,79); jest niezdefiniowany w CCLayer, nie połączy aplikacji Jakieś pomysły? Dzięki. –

+9

FYI - ten przykład jest nieaktualny dla wersji 1.0 Cocos2D. "drawLine" już nie istnieje. Użyj "ccDrawLine" z CCDrawingPrimitives z tymi samymi argumentami. – Shakakai

+0

Aby dodać do komentarza Shakakai: również spójrz na 'ccDrawPoly' w cocos2d, jeśli chcesz narysować więcej niż jeden segment linii. – MechEthan

8

Można również użyć klasy CCRibbon narysować linię z fakturą. Oto przykład:

Najpierw trzeba stworzyć CCRibbon o szerokości, obrazu, długości, koloru i blaknięcie parametry

ccColor4B myColor = ccc4(255, 255, 255, 150); 

CCRibbon *ribbon = [CCRibbon ribbonWithWidth:10 image:@"green.png" length:10.0 color:myColor fade:0.7f]; 

Następnie dodajemy go jako dziecko:

[self addChild:ribbon z:8]; 

po uruchomieniu Aplikacja teraz nic nie zobaczysz, ponieważ nie dodałeś jeszcze żadnych punktów do CCRibbon, dodajmy więc 2 punkty:

[ribbon addPointAt:ccp(10,10) width:10]; 

[ribbon addPointAt:ccp(15,15) width:10]; 
Nie można usuwać poszczególne punkty, ale można usunąć CCRibbon od jego rodzica

[self removeChild:ribbon cleanup:YES]; 

kod źródłowy: http://www.ccsprite.com/cocos2d/using-ccribbon-example.html