c++ - 如何在 cocos2d-x 3 beta 中围绕 Sprite 绘制边界框?

标签 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);

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

附言 我在这里看到了一些东西,但我不知道如何将它翻译成 cocos2d-x 3 http://www.naveoss.com/site/450/tutorials/opengl-drawing-boxes-around-ccsprite-subclasses

最佳答案

请尝试以下代码片段(这仍然是 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(); }

另请查看性能优于 DrawPrimitive 的 CCDrawNode 和 drawPolygon。

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

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

关于c++ - 如何在 cocos2d-x 3 beta 中围绕 Sprite 绘制边界框?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21379814/

相关文章:

c++ - f-noelide-constructors 未按预期工作

c++ - 如何重载继承类中的方法,以便基类看到继承的版本?

c++ - 为什么我的公式不计算 WHILE 循环中的值?

c++ - Cocos2d-x (4.0) - 整数像素缩放

c++ - cocos2d-x 中所有场景都可以访问的对象

c++ - 如何在cocos2d-x中制作清晰的纹理

c++ - C++ 中的静态全局变量

android - Cocos2d-js:一些演示不能在 Genymotion 上运行

javascript - Cocos2d-js 3.2 中何时取消注册事件监听器和计划回调

android - soomla : cocos2dx : Profile -> "ProviderNotFoundException" (cocos2d3. x)