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

4

2 回答 2

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);
于 2014-01-28T08:00:16.290 回答
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);`

以及其他让你想起UIBezierPathCocoa 的酷东西。

于 2015-11-17T14:19:30.180 回答