我有两层。每个图层都有一个原始图形,其中包含OpenGL,如下所示:
void Layer1::drawPolygon()
{
glLineWidth(1);
DrawPrimitives::setDrawColor4B(255,255,255,255);
DrawPrimitives::setPointSize(1);
// Anti-Aliased
glEnable(GL_LINE_SMOOTH);
// filled poly
glLineWidth(1);
Point filledVertices[] = { Point(10,120), Point(50,120), Point(50,170), Point(25,200), Point(10,170) };
DrawPrimitives::drawSolidPoly(filledVertices, 5, Color4F(0.5f, 0.5f, 1, 1 ) );
}
当我将这些图层添加到场景并设置Z阶1和2时,我看到我可以将一个基元置于另一个基础之上,反之亦然 - 当我交换Z顺序值时。当我将一个精灵添加到其中一个图层时,奇怪的事情开始了。如果我添加一个精灵,那么精灵就位于该层的基元之上,而不仅仅是该层。即使图层具有较小的Z索引,无论如何,它的精灵位于其他图层的图元之上,而其图元低于其他图元形状 - 正如预期的那样。这个可以吗?我该怎么理解这个?如果我想在所有精灵上绘制基元怎么办?
编辑:
我可以通过以下方式操纵他们的订单,但不能操纵订单:
CCDirector::getInstance()->setDepthTest(true);
myLayer->setVertexZ(-1);
但是我不明白为什么Z层次较小的图层中的精灵比Z层次较大的图层的图元要晚。换句话说,似乎所有图层中的所有图元都是按照它们的顺序绘制的,那么对于精灵来说也是如此。
答案 0 :(得分:2)
由于cocos2d-x 3.0上的新多线程渲染器,使用基元绘制需要采用不同的方法。看看我在这个帖子的回复:
答案 1 :(得分:1)
我相信cocos2d-x V3 beta 2中存在一个错误,它会使原始绘图始终显示在所有图层下方。 它在V3.0 RC中是固定的(我理解)
这是不正确的 - 没有错误(我被其他帖子误导了 - 道歉)。
请参阅下面的帖子,获取一个链接,说明在“正确”的z顺序中绘制基元需要采取的措施。
总结是所有绘图操作都被添加到游戏循环中的队列中,然后处理了队列 - 因此您需要将原始绘图添加到队列中而不是立即绘制。