2014-01-27 55 views
0

我尝试绘制边界周围的雪碧箱我加层和位置某处 的CC_SPRITE_DEBUG_DRAW标志版本3 不工作,但我从TOKE CCSprite如何在cocos2d-x 3 beta的Sprite中绘制边界框?

的代码我用精神抽签方法验证码:

Point vertices1[4] = { 
     Point(_quad.bl.vertices.x, _quad.bl.vertices.y), 
     Point(_quad.br.vertices.x, _quad.br.vertices.y), 
     Point(_quad.tr.vertices.x, _quad.tr.vertices.y), 
     Point(_quad.tl.vertices.x, _quad.tl.vertices.y), 
    }; 

    DrawPrimitives::setDrawColor4B(255, 255, 0, 255); 
    glLineWidth(2); 
    Point(50,100) }; 
    DrawPrimitives::drawPoly(vertices, 4, true); 

但它给了我在主窗口左下角绘制雪碧的世界空间位置,而不是精神位置。 我该如何解决这个问题?

PS 我看到的东西在这里,但我不知道如何翻译它cocos2dx 3 http://www.naveoss.com/site/450/tutorials/opengl-drawing-boxes-around-ccsprite-subclasses

回答

1

请有在下面的代码片段一试(这仍然是cocos2dx V2,但你可以很容易地升级到V3)。

void YourSprite::draw() { 
    ccGLEnableVertexAttribs(kCCVertexAttribFlag_Position); 
    kmGLPushMatrix(); 
    CCRect bb = boundingBox(); 
    CCPoint vertices[4] = { 
     CCPoint(bb.origin.x, bb.origin.y), 
     CCPoint(bb.origin.x, bb.origin.y + bb.size.height), 
     CCPoint(bb.origin.x + bb.size.width, bb.origin.y + bb.size.height), 
     CCPoint(bb.origin.x + bb.size.width, bb.origin.y) 
    }; 
    ccDrawColor4B(255, 255, 0, 255); 
    glLineWidth(2); 

    ccDrawPoly(vertices, 4, true); 
    kmGLPopMatrix(); } 

另外检查出CCDrawNode和drawPolygon比DrawPrimitive有更好的性能。

PS:请注意,您应该将线宽重置为其先前的状态。

float oldWidth = .0f; 
    glGetFloatv(GL_LINE_WIDTH, &oldWidth); 
    /// Set new line width 
    glLineWidth(mLineWidth); 
    .... 
    /// Reset previous line width 
    glLineWidth(oldWidth); 
0

从Cocos2d-x 3.3开始,您可以使用DrawNode类绘制形状。它从Node继承,因此您可以将其添加为小孩或将其用作父项。

auto box = DrawNode::create(); 
box::drawRect(p1, p2, p3, Color4F(255, 255, 0, 255)); 
box::setLineWidth(2) 
this->addChild(box); // this being a node or scene 

还有

void drawPoint(const Vec2& point, const float pointSize, const Color4F &color); 
void drawLine(const Vec2 &origin, const Vec2 &destination, const Color4F &color);` 

,并从可可提醒你的UIBezierPath其他很酷的东西。