您将获得一个在libgdx中使用的包含多个Group和Actor的复杂Scene2D图形。您希望用户选择一些Actor并在最后绘制它们,以便它们出现在其他Actor的顶部。
我想要两次迭代Stage。第一次绘制未选定的Actors,第二次绘制选定的Actors。然而,我没有看到任何“好”的方法来强制执行此行为。
我更喜欢干净的选项。我不想仅仅为了这个小的添加而复制整个方法实现。
不起作用的方法:
- Actor的toFront()方法仅适用于其兄弟节点。 - 交换舞台上Actor的位置:这会修改Actors的变换。
需要考虑的情况:您有一个Root,其中包含一个名为gA的组和一个名为gB的组。 Group gA包含两个图像iA1和iA2。组gB包含一个图像iB。假设先添加Group gA到舞台,并且图像iA1与iB重叠。现在,您想要选择iA1并使其显示在iB之上。我不想仅调用gA.toFront(); 这将使整个Group gA置于前端,这意味着iA2也被置于前端。将iA2放在前面会隐藏Group gB内部的图像部分。
我想要两次迭代Stage。第一次绘制未选定的Actors,第二次绘制选定的Actors。然而,我没有看到任何“好”的方法来强制执行此行为。
我更喜欢干净的选项。我不想仅仅为了这个小的添加而复制整个方法实现。
不起作用的方法:
- Actor的toFront()方法仅适用于其兄弟节点。 - 交换舞台上Actor的位置:这会修改Actors的变换。
需要考虑的情况:您有一个Root,其中包含一个名为gA的组和一个名为gB的组。 Group gA包含两个图像iA1和iA2。组gB包含一个图像iB。假设先添加Group gA到舞台,并且图像iA1与iB重叠。现在,您想要选择iA1并使其显示在iB之上。我不想仅调用gA.toFront(); 这将使整个Group gA置于前端,这意味着iA2也被置于前端。将iA2放在前面会隐藏Group gB内部的图像部分。
Actor
的z-index,通过使用toFront()
或toBack()
,它将更改该Actor
的z-Index并对Actor
列表进行排序。具有高z-index的Actor
将最后绘制,具有低z-index的Actor
将首先绘制,因此在后面。如果您在select()
方法中调用actor.toFront()
或者其他类似的方法,这个Actor
将会被最后渲染。在deselect()
中,您可以调用toBack()
。这也适用于Group
,因为Group
是Actor
子类。虽然这不是一个100%有效的方法,但在这种情况下应该已经足够了。 - Robert P