在我的游戏中,如果我触摸特定物体,硬币物体将以随机速度从它们中出来并占据随机位置。
public void update(delta){
if(isTouched()&& getY()<Constants.WORLD_HEIGHT/2){
setY(getY()+(randomSpeed * delta));
setX(getX()-(randomSpeed/4 * delta));
}
}
现在我想让这些硬币占据一些模式的位置。如果3个硬币出来,三角形图案或4个硬币,像那样的矩形图案。
我试图让它工作,但硬币出来并移动,但相互重叠。无法创建任何模式。 模式如:
这就是我试过的
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;
可能这是一个简单的逻辑实现,但我浪费了很多时间,并对如何使其工作感到困惑。 任何帮助将不胜感激。
答案 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;
...