基本上我想把我的敌人从一个位置移到另一个位置。
起始位置不是问题......也不是他们想去的地方。
问题在于他们如何到达那里。根据我写的代码,他们只是传送出地图。
所以我甚至不打算发布它。使用三角形......从A点到B点的最有效方法是什么?
让我们说A点是10,10;而B点是123,349。但A也有可能是B而B将是A.所以它也必须处理负数。
现在让问题复杂化的最后一件事就是每次重新渲染时它会移动1到5个像素......所以如果它超过了位置,我不知道如何检查它是否在一般区域。
谢谢!顺便说一句我不需要完整的代码......只是想想!我可以自己编码。谢谢!!!
当前代码:
if (enemyList.length > 0) {
for (int[] x : enemyList) {
double changeX;
double changeY;
//if already in spot, anounce it
if (x[0] == x[2] && x[1] == x[3]) {
x[2] = -1;
x[3] = -1;
}
//if anounced generate new spot of interest
if (x[2] == -1 || x[3] == -1) {
x[2] = generateRandom(0, 550);
x[3] = generateRandom(0, 400);
}
//find distance from target and move there
int _y = x[1] - x[3];
int _x = x[0] - x[2];
if (_x > _y) {
changeX = _x / _y;
changeY = _y / _y;
} else {
changeY = _y / _x;
changeX = _x / _x;
}
changeY = changeY * generateRandom(0, 10);
changeX = changeX * generateRandom(0, 10);
//change physical position
x[0] += (int) changeX;
x[1] += (int) changeY;
}
}
答案 0 :(得分:2)
根据代码看起来你的敌人可能会以弯曲的方式摆动到目的地,但是通过检查很难说清楚。也许你只需要交换源和目的地,因为看起来你可能只是倒退了:
int _y = x[3] - x[1];
int _x = x[2] - x[0];
这是你想要的,还是应该直线?
speed = 5; // "pixels" per frame
deltaX = destX - sourceX;
deltaY = destY - sourceY;
distance = sqrt(deltaX^2 + deltaY^2);
moveX = speed / distance * deltaX;
moveY = speed / distance * deltaY;
newX = sourceX + moveX;
newY = sourceY + moveY;
我使用类似的三角形来计算moveX
和moveY
。请注意,平方根很慢,但这可能适合您的目的......一旦有了它,就有办法优化平方根。