libGDX:从多维数组类中获取项的特定索引

时间:2016-01-19 20:08:42

标签: java arrays multidimensional-array libgdx

在我的游戏中,我从com.badlogic.gdx.utils.Array Class创建了多维数组,如下所示:

private static final Array<Array<Actor>> ARRAY_COLS = new Array<Array<Actor>>();

enter image description here

现在,来自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}}一样

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,因此您可以使用Vector2Point或带有两个存储循环索引的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();