2012-07-19 7 views
10

He estado jugando con Cocos2D-X en mi computadora, y lo tengo para crear el programa hello world en todos los dispositivos en los que me gustaría poder construirlo.¿Cómo se dibuja una línea usando Cocos2D-X?

Sé cómo hacer que el programa muestre un sprite y muestre una etiqueta, pero no he podido lograr que el programa dibuje una línea. ¿Cómo puedo trazar una línea en Cocos2D-X?

Respuesta

10

uso void ccDrawLine(const CCPoint& origin, const CCPoint& destination) función declarada en CCDrawingPrimitives.h

Editar

nunca he intentado usar primitivas mí mismo. Pero como sé que todo en cocos2d se traduce vis CCNode o su subclase. Entonces debes poner tu código dentro del método draw de algunos CCNode o su subclase.

+0

He incluido CCDrawingPrimitives.h, y ccDrawLine escrito (CCPoint (0.3f, 0.3f), CCPoint (77.7f, 77.7f)); en mi código, pero no veo ninguna diferencia visual cuando ejecuto la aplicación. ¿Me estoy perdiendo algo obvio? – Jon

+0

@Jon: Por favor, vea mi edición – Andrew

+0

Por cierto. Me enfrenté con el siguiente problema. He escrito: 'this-> colorLayer-> initWithColor (ccc4 (100, 100, 100, 255))' así que no vi nada ahogado con ccDrawLine debido a Z-order. Luego lo cambié a: 'this-> colorLayer-> init();' y ahora todo se muestra bien :) – JavaRunner

7

Debe utilizar ccDrawLine función en empate()

Ejemplo

void GameLayer::draw() 
{ 
    //red line from bottom left to top right corner 
    cocos2d::ccDrawColor4F(1.0f, 0.0f, 0.0f, 1.0f); 
    cocos2d::ccDrawLine(ccp(0,0), ccp(100, 100)); 
} 

Y recuerde capa debe estar vacío porque llamar primer sorteo el próximo será atraer a los niños por lo que si usted tiene niños que se superpondrá a lo tu dibujas.

orden Z :)

Así que en su código que tiene la clase

class MyLayer : public CCLayer 
{ 
    ... //your code 
    init() 
    { 
     CCLayer* pLayer = new GameLayer(); //It will be debug layer :) 
    addChild(pLayer);//Alse you can set here Z order. 
    pLayer->release(); 
    } 
    virtual void draw() 
    { 
     //red line from bottom left to top right corner 
     ccDrawColor4F(1.0f, 0.0f, 0.0f, 1.0f); 
     ccDrawLine(ccp(0,0), ccp(100, 100)); 
    } 
} 

Por encima de código dibujará lo que quiere.

+1

Si mi capa no está vacía, no puedo dibujar. – einverne

+4

Puede, pero probablemente, atraer a sus hijos. Cambia el orden z de los niños. O anular la visita y dibujar al final –

+0

Muchas gracias. Pero estoy un poco confundido acerca de las capas múltiples. – einverne

6

He encontrado otra manera fácil de dibujar la línea en CCLayer. Cocos2d-x tiene una clase llamada CCDrawNode. Puede consultar la referencia here. Y es muy fácil de usar la función:

void drawSegment(const CCPoint & from, 
    const CCPoint & to, 
    float radius, 
    const ccColor4F & color 
) 

pequeño ejemplo:

CCDrawNode* node = CCDrawNode::create(); 
addChild(node,10);//Make sure your z-order is large enough 
node->drawSegment(fromPoint,toPoint,5.0,ccc4f(180,180,180,100)); 
1

En cocos2d-x 3.0 alfa puede utilizar

DrawPrimitives::drawLine(const cocos2d::Point &origin, const cocos2d::Point &destination); 
+0

Puede, y debe usar cocos2d-x 3.x, en mi humilde opinión, pero 'DrawPrimitives :: drawLine (const cocos2d :: Punto & origen, const cocos2d :: Punto & destino); 'no funciona OOTB. Ver http://stackoverflow.com/a/22724319/866333 – John

2
auto node = DrawNode::create(); 
node->drawLine(Vec2(200, 200), Vec2(200, 500), Color4F(1.0, 1.0, 1.0, 1.0)); 
this->addChild(node); 
Cuestiones relacionadas