я пытаюсь нарисовать ограничивающий прямоугольник вокруг спрайта, который я добавил в слой, и расположить его где-нибудь
флаг 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);
но это дает мне мировую космическую позицию, которая рисует Спрайта в левом нижнем углу главного окна, а не духовную позицию.
Как я могу это исправить ?
п.с.
я видел что-то здесь, но я не знаю, как перевести это на 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(); }
Также проверьте CCDrawNode и drawPolygon, который имеет лучшую производительность, чем DrawPrimitive.
PS: обратите внимание, что вы должны сбросить ширину линии до ее предыдущего состояния.
float oldWidth = .0f;
glGetFloatv(GL_LINE_WIDTH, &oldWidth);
/// Set new line width
glLineWidth(mLineWidth);
....
/// Reset previous line width
glLineWidth(oldWidth);
Начиная с 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);`
и другие интересные вещи, которые напоминают вам о UIBezierPath
из какао.