对象数组定位-LibGdx

时间:2017-05-17 06:12:19

标签: object libgdx

在我的游戏中,如果我触摸特定物体,硬币物体将以随机速度从它们中出来并占据随机位置。

public void update(delta){
if(isTouched()&& getY()<Constants.WORLD_HEIGHT/2){
         setY(getY()+(randomSpeed * delta));
         setX(getX()-(randomSpeed/4 * delta));
         }
  }

现在我想让这些硬币占据一些模式的位置。如果3个硬币出来,三角形图案或4个硬币,像那样的矩形图案。

我试图让它工作,但硬币出来并移动,但相互重叠。无法创建任何模式。 模式如:  enter image description here enter image description here

这就是我试过的

int a = Math.abs(rndNo.nextInt() % 3)+1;//no of coins
        int no =0;

        float coinxPos = player.getX()-coins[0].getWidth()/2;
        float coinyPos = player.getY();
        int minCoinGap=20;
        switch (a) {
        case 1:
            for (int i = 0; i < coins.length; i++) {
                if (!coins[i].isCoinVisible() && no < a) {
                    coins[i].setCoinVisible(true);

                    coinxPos = coinxPos+rndNo.nextInt()%70;
                    coinyPos = coinyPos+rndNo.nextInt()%70;
                    coins[i].setPosition(coinxPos, coinyPos);
                    no++;
                }
            }
            break;
        case 2:
            for (int i = 0; i < coins.length; i++) {
                if (!coins[i].isCoinVisible() && no < a) {
                    coins[i].setCoinVisible(true);
                    coinxPos = coinxPos+minCoinGap+rndNo.nextInt()%70;
                    coinyPos = coinyPos+rndNo.nextInt()%150;
                    coins[i].setPosition(coinxPos, coinyPos);
                    no++;
                }
            }
           break:
          ......
          ......
          default:
            break;

可能这是一个简单的逻辑实现,但我浪费了很多时间,并对如何使其工作感到困惑。 任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

在我的游戏中,当我想要一些物体在X时,Y到达一些特定的坐标Xe,Ye在每一帧我都加入它的坐标当前和想要的位置之间的差异,除以常数并乘以时间从最后一帧。这样它开始快速移动,慢慢地慢慢走,看起来很酷。

X += ((Xe - X)* dt)/ CONST;
Y += ((Ye - Y)* dt)/ CONST;

您将通过实验获得CONST值,更大的值意味着更慢的移动。如果您希望它看起来更冷,您可以添加速度变量,而不是根据距离终点位置的距离直接更改坐标,您可以调整该速度。这样,即使物体在某个点到达终点位置,它仍然会有一定的速度,它会继续移动 - 它会有惯性。要实现起来有点复杂,但运动会更加狂野。

如果你想要那个Xe,你是一个特定的位置(不是随机的),那么只需设置这些常量值。不需要让它更复杂。像另一个constat OFFSET一样设置:

static final int OFFSET = 100;

Xe1 = X - OFFSET; // for first coin
Ye1 = Y - OFFSET;

Xe2 = X + OFFSET; // for second coin
Ye2 = Y - OFFSET;

...