2009-03-27 15 views
19

Estoy tratando de familiarizarme con Cocos2d tratando de lograr cosas simples. En este punto, tengo una escena, esa escena tiene un fondo de sprite y una capa. Intento dibujar sobre la Capa usando drawLine. Aquí está mi intento actual.Cómo trazar una línea con 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 

Que genera el error "el valor de vacío no se ignora como debería ser". Entonces obviamente lo estoy haciendo mal, pero espero que puedas ver mi razonamiento.

También he probado este

-(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; 
} 

Qué no me da un error, pero tampoco funciona. Me doy cuenta de que no entiendo algo fundamental, pero ¿alguien puede orientarme en la dirección correcta?

Respuesta

22

Desde el 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

No veo nada cuando pego esas 2 líneas en mi archivo HelloWorldLayer.m. Sugerencias? – quantumpotato

+0

Ah, ponerlos en el método de dibujar capas, funciona bien. ¡Gracias! – quantumpotato

+2

GL_LINE_SMOOTH no es compatible con iOS OpenGL 2. http://www.cocos2d-iphone.org/forum/topic/31940 –

14

Ok, lo descubrí para cualquiera que esté interesado. Aquí está el código con el comentario que explica qué hacer.

@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 

Supongo que se llama al método de dibujo en cada fotograma.

+0

No funciona para mí. drawLine (10,100,50,79); no está definido en CCLayer, no se vinculará la aplicación ¿Alguna idea? Gracias. –

+9

FYI - este ejemplo está desactualizado para la versión 1.0 de Cocos2D. "drawLine" ya no existe. Use "ccDrawLine" desde CCDrawingPrimitives con los mismos argumentos. – Shakakai

+0

Para agregar al comentario de Shakakai: también eche un vistazo a 'ccDrawPoly' en cocos2d si desea dibujar más de un segmento de línea individual. – MechEthan

8

También puede utilizar la clase CCRibbon para dibujar la línea con su textura. Aquí está un ejemplo:

En primer lugar se crea CCRibbon con la anchura, la imagen, la longitud, el color y se desvanecen parámetros

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

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

A continuación, añadir que como un niño:

[self addChild:ribbon z:8]; 

Si ejecuta el aplicación ahora no verá nada porque aún no ha agregado ningún punto al CCRibbon así que agregue 2 puntos

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

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

No es posible eliminar puntos individuales, pero se puede quitar el CCRibbon de su matriz

[self removeChild:ribbon cleanup:YES]; 

El código fuente de: http://www.ccsprite.com/cocos2d/using-ccribbon-example.html

Cuestiones relacionadas