1

我有两层。每个层都有一个原始绘图,使用 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 顺序值时。当我将一个精灵添加到其中一个图层中时,奇怪的事情就开始了。如果我 addChild 一个 sprite,那么 sprite 位于该层的图元之上,而不仅仅是该层。即使该层具有较小的 Z 索引,无论如何它的精灵在其他层的图元之上,而其图元在另一个图元形状之下 - 正如预期的那样。这个可以吗?我应该怎么理解这个?如果我想在所有精灵之上绘制图元怎么办?

编辑:

我可以使用以下命令操纵他们的顺序,但不能操纵绘制顺序:

CCDirector::getInstance()->setDepthTest(true);
myLayer->setVertexZ(-1);

但我不明白为什么 Z 顺序较小的图层中的精灵比 Z 顺序较大的图层的图元绘制得晚。换句话说,似乎所有图层中的所有图元都是根据它们的顺序绘制的,然后对精灵进行相同的绘制。

4

2 回答 2

2

由于 cocos2d-x 3.0 上新的多线程渲染器,使用图元绘制需要不同的方法。看看我在这个帖子上的回复:

https://stackoverflow.com/a/22724319/1468700

于 2014-03-28T22:39:29.510 回答
1

我相信 cocos2d-x V3 beta 2 中存在一个错误,它使原始绘图始终出现在所有图层下方。它在 V3.0 RC 中已修复(我理解)

这是不正确的 - 没有错误(我被其他帖子误导了 - 我很抱歉)。

请参阅下面的帖子以获取解释如何让基元以“正确”z 顺序绘制的链接。

总结是所有绘图操作都被添加到游戏循环中的队列中,然后处理队列 - 因此您需要将原始绘图添加到队列中而不是立即绘图。

于 2014-03-13T03:36:31.333 回答