给你一个复杂的Scene2D
图中libgdx
与几个Group's
and Actor's
。您希望用户选择一些Actors
并在最后绘制它们,以便它们看起来集中在任何其他之上Actors
.
我想迭代一下Stage
两次。第一次绘制未选择的Actors
,第二次绘制所选的actors
。然而,我没有看到任何“好”方法来强制执行这种行为。
我更喜欢干净的选择。我不想仅仅为了这个小的添加而复制整个方法实现。
什么不起作用:
- the
Actor's
toFront
() 方法仅适用于它的兄弟姐妹。
- 交换位置
Actor's
在舞台中:这会修改转换Actors
have.
考虑的场景:你有一个Root
与一群人gA和一群gB. Group
gA包含两个图像iA1 and iA2. Group
gB包含一张图像iB。鉴于Group
gA首先添加到舞台上并且该图像iA1重叠于iB;现在你想选择iA1并让它出现iB。我不想只打电话gA.toFront();这将使整个Group
gA到前面,这也意味着iA2被放在前面。推杆iA2前面有隐藏部分图像的不良效果Group
gB
有两种解决方案——
1 - 停止使用[多个]组。很糟糕,但这可能是更简单的选择。如果您查看渲染/绘制是如何完成的,您可以从舞台的根组开始,获取其子级并渲染它们。对于每个子项,如果它们是一个组,则渲染该组的子项。ZIndex无非是一个群体中孩子的顺序。如果你看演员的setZIndex
你可以看到为什么toFront
or setZIndex
只影响兄弟姐妹。
public void setZIndex (int index) {
if (index < 0)
throw new IllegalArgumentException("ZIndex cannot be < 0.");
Group parent = this.parent;
if (parent == null)
return;
Array<Actor> children = parent.getChildren();
if (children.size == 1)
return;
if (!children.removeValue(this, true))
return;
if (index >= children.size)
children.add(this);
else
children.insert(index, this);
}
2 - 唯一的其他选择是更改所有演员的绘制顺序。你必须延长Stage
并替换draw
方法draw
基于您选择的不同顺序。您可能必须合并许多功能Group.drawChildren
method.
太长了;事情的实施方式LibGDX- 组是一个层。如果您不需要图层,则可以更改组的功能或停止使用组。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)