如何在libgdx中交换actor

时间:2016-04-04 04:04:47

标签: java libgdx

所以我试图创建一个简单的比赛3游戏。 我创建了一个actor类Tile来存储关于行和列的图像和数据,并创建了另一个类GameField,它有一个大小为9 * 9的tile数组。

我创建了一个名为swap tiles的函数来交换tile,如下所示,但它有一个奇怪的行为,即在交换任意两个tile之后,其中一个响应点击而另一个停止响应点击。< / p>

以下是Tile类的输入监听器和gamefield的交换磁贴功能:

App-Id

请通知我我认为swapTile函数中存在的错误

2 个答案:

答案 0 :(得分:2)

这样您就不会交换对象 - 您只是分配引用。内部方法变量没有被Java中的值复制 - 然后在

之后
     Tile Temp = gameField[activeTile.row][activeTile.column];

您在gameField[activeTile.row][activeTile.column]Temp中都有相同的实例,所以当您在此处更改其中一个时:

     gameField[activeTile.row][activeTile.column] = gameField[r][c];

第二个因素也会受到影响。

您需要做的是逐步复制对象通过实现复制构造函数可以实现的目标。 Take a look at this thread。简而言之,它看起来像

    class Tile extends Actor {
        int row, column; //and others

        public Tile() {}

        public Tile(Tile tile) {
            this();

            //now copying another tile's values
            this.row = tile.row;
            this.column = tile.column;
        }
    }

交换应该不是通过分配引用来实现,而是创建新对象,如

    Tile temp = new Tile( gameField[activeTile.row][activeTile.column] );

另请注意,良好的做法是命名以小写字母开头的变量和以大写字母开头的类。那么你的temp变量定义应该是

Tiled temp = ...;

答案 1 :(得分:1)

如果你想在3场比赛中实现交换。你应该同时对两个角色使用移动动作。