我尝试在我添加到图层的 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/