如何在cocos2d-x 3 beta中绘制Sprite周围的边界框?

时间:2014-01-27 11:34:15

标签: c++ cocos2d-x cocos2d-x-3.0

我尝试在Sprite周围绘制边界框,我添加到图层并将其放置在某处 CC_SPRITE_DEBUG_DRAW标志在版本3中不起作用 但我从CCSprite

中获取代码

我在精神绘制方法中使用此代码:

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 我在这里看到的东西,但我不知道如何将其翻译成cocos2d-x 3 http://www.naveoss.com/site/450/tutorials/opengl-drawing-boxes-around-ccsprite-subclasses

2 个答案:

答案 0 :(得分: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);

答案 1 :(得分: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);`

和其他很酷的东西让你想起Cocoa的UIBezierPath