我尝试在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
答案 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
。