我在LibGdx Stage对象中排序Actors时遇到问题.舞台渲染后,图像按照添加顺序渲染.Stage使用Array来保存Actors.我已经尝试设置每个Actor的ZIndex,但它仍然没有排序.然后我尝试创建一个像这样的比较器对象:
public class ActorComparator implements Comparator < Actor > {
@Override
public int compare(Actor arg0, Actor arg1) {
if (arg0.getZIndex() < arg1.getZIndex()) {
return -1;
} else if (arg0.getZIndex() == arg1.getZIndex()) {
return 0;
} else {
return 1;
}
}
}
Run Code Online (Sandbox Code Playgroud)
然后当我想做我做的实际比较时:
Collections.sort(Stage.getActors(), new ActorComparator());
Run Code Online (Sandbox Code Playgroud)
它给我以下错误,不会编译:
The method sort(List<T>, Comparator<? super T>) in the type Collections
is not applicable for the arguments (Array<Actor>, ActorComparator)
Run Code Online (Sandbox Code Playgroud)
我不知道我做错了什么.谁可以给我解释一下这个?
mdu*_*dup 18
而不是接受的答案,我更喜欢准备几个"图层"组,然后以任何顺序添加到这些组中,它让我高兴.
Group bg = new Group();
Group fg = new Group();
// the order is important in the following two lines
stage.addActor(bg);
stage.addActor(fg);
bg.addActor(whatever);
fg.addActor(whatever);
bg.addActor(whatever);
fg.addActor(whatever);
Run Code Online (Sandbox Code Playgroud)
(当然,addActor()顺序在元素bg之间,元素之间仍然很重要fg,但不能在元素fg和元素之间bg.)
该工作流在继承的情况下,其中基础类拥有保护层群(效果很好this.bg,this.fg...),并增加他们为了舞台.然后派生类可以在不处理顺序的情况下向这些图层添加内容.
Ezh*_*l V 11
看起来您的代码Stage.getActors()返回的Array是Actors而不是a List.
Collections.sort()方法只接受列表.尝试:
Collections.sort(Arrays.asList(Stage.getActors().toArray()), new ActorComparator());
Run Code Online (Sandbox Code Playgroud)
从@James Holloway更新排序(通过问题中的z-index): 舞台将z-index覆盖为数组的内部顺序.因此设置Z-Index没有任何效果,除非您将其设置为高于列表的长度,然后它只是将图像放在列表的顶部(内部Stage执行此操作).这可以通过按名称或ID排序来解决.
| 归档时间: |
|
| 查看次数: |
9732 次 |
| 最近记录: |