【问题标题】:libGDX: Get Specific Index of an Item from Multidimensional-Array ClasslibGDX:从多维数组类中获取项目的特定索引
【发布时间】:2016-01-19 20:08:42
【问题描述】:

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

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

现在,在来自InputListenertouchDown 方法中,H我可以从ARRAY_COLS 获得特定的演员及其索引吗?我知道的所有演员event.getTarget();如下:

InputListener listener = new InputListener() {
       public boolean touchDown(InputEvent event, float x, float y, int pointer, int button) { 
           return true; 
       });

编辑:我怎样才能得到这个演员的index? 像ARRAY_COLS.IndexOf(event.getTarget());,在上一个图像案例_col == 3;_row == 4;中,目标是ARRAY_COLS.get(_col).get(_row);

【问题讨论】:

    标签: java arrays multidimensional-array libgdx


    【解决方案1】:

    嗯,事件应该返回被点击的特定actor。如果没有,请尝试设置演员的Touchable 状态。如果它返回包含您需要的Group 演员,您可以随时尝试使用Actor#hit(float x, float y, boolean touchable),它采用本地演员坐标并应返回特定的点击位置的演员。真的不需要存储演员的二维数组。

    另外,Actor 有一个 setName 方法。您可以使用ObjectMap&lt;String, Actor&gt;(也是一个轻量级 LibGDX 集合)代替 2D 数组,为 actor 赋予有意义的名称,并在启动期间将 actor 放入地图中。

    如果您需要一个二维数组,您可以使用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();
    

    【讨论】:

    • +1。我编辑了我的问题。是的,我将索引存储在UserObject。然后我可以很容易地得到演员的索引。谢谢你的提示。
    • @Crowni,如果它解决了你的问题,我想你可以接受答案。
    • 非常感谢您的回答。 ;)
    猜你喜欢
    • 2017-01-12
    • 2020-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多