在我的游戏中,我从com.badlogic.gdx.utils.Array
Class创建了多维数组,如下所示:
private static final Array<Array<Actor>> ARRAY_COLS = new Array<Array<Actor>>();
现在,来自touchDown
的{{1}}方法, H 我可以从InputListener
得到一个特定的演员吗?我所有的已知演员ARRAY_COLS
如下:
event.getTarget();
编辑:我如何获得此演员的索引?
就像上一个图片案例InputListener listener = new InputListener() {
public boolean touchDown(InputEvent event, float x, float y, int pointer, int button) {
return true;
});
和ARRAY_COLS.IndexOf(event.getTarget());
ARRAY_COLS.get(_col).get(_row);
的{{1}}一样
答案 0 :(得分:2)
嗯,事件应该返回被点击的特定actor。如果没有,请尝试设置actor Touchable
状态。如果它返回包含您需要的Group
actor,您可以尝试使用Actor#hit(float x, float y, boolean touchable)
,它接受本地actor的坐标,并且应该在特定的单击位置返回一个actor。实际上,无需存储演员的2D数组。
此外,Actor
还有setName
方法。您可以使用ObjectMap<String, Actor>
(也是轻量级的LibGDX集合)代替2D数组,为演员提供有意义的名称,并在演员发布时将其放入地图中。
如果您需要 2D数组,则可以使用setUserObject
来存储索引值。我假设您在嵌套的for
循环中创建了actor,因此您可以使用Vector2
,Point
或带有两个存储循环索引的int变量的简单类。然后,您可以将其序列化为字符串并用作名称或作为用户对象放置,然后在侦听器方法中检索它。
例如:
public class IntPair { private final int x, y; /* Constructor, getters */ }
// Creation:
for(int x = 0; x < width; x++) {
for(int y = 0; y < height; y++) {
Actor actor = new Actor();
actor.setUserObject(new IntPair(x, y));
}
}
// Accessing index:
IntPair index = (IntPair) actor.getUserObject();