Java 在2D中移动敌人?
基本上我想把我的敌人从一个位置转移到另一个位置 开始的位置没有问题。。。他们要去的地方也不是 问题在于他们如何到达那个里。用我写的代码,他们只是从地图上传送出去 所以我甚至不打算把它贴出来。使用三角形。。。从A点到B点最有效的方法是什么 假设A点是10,10;B点是123349。但是也有可能A是B,B是A,所以它也必须处理否定 现在最后一件使问题复杂化的事情是,它每次重新绘制时都会在1到5像素之间移动。。。因此,如果它超过了位置,我不知道如何检查,看看它是否在一般地区 谢谢!顺便说一句,我不需要完整的代码。。。只是想法!!!我可以自己编写代码。谢谢你 当前代码:Java 在2D中移动敌人?,java,image,geometry,Java,Image,Geometry,基本上我想把我的敌人从一个位置转移到另一个位置 开始的位置没有问题。。。他们要去的地方也不是 问题在于他们如何到达那个里。用我写的代码,他们只是从地图上传送出去 所以我甚至不打算把它贴出来。使用三角形。。。从A点到B点最有效的方法是什么 假设A点是10,10;B点是123349。但是也有可能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;
}
}
根据代码,看起来你的敌人可能会以弯曲的方式摆动到目的地,但仅仅通过观察很难判断。也许您只需要交换源和目标,因为看起来您可能只是将其向后:
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
。请注意,平方根的速度很慢,但这可能对您的目的是好的。。。一旦你让它工作起来,就有办法优化平方根。你当前的算法是什么样子的?@Justin,好了,这就是我现在所拥有的。。。enemyList存储4个变量。。。currentX,currentY,futureX,futureY。。。未来意味着目的地。。。希望这对您有所帮助:)我不确定Java环境中的细节,但这通常是通过线性插值完成的。从谷歌的快速搜索中,似乎有这样一个类别:@willytate你能解释一下什么是线性插值吗?我有一种强烈的感觉,如果我搜索谷歌,我不会理解它,我希望你能用简单的语言来表达。我会搜索谷歌无论如何,但我期待着你的答复。谢谢你这么多的提示顺便说一句!基本上,给定两个点开始(x,y)和结束(x,y
),它会计算这两个点之间的线,并根据0和1之间的权重值将对象移动到这条线上。权重值应视为百分比。随着重量的增加,对象将从起点移动到终点。我通过微软的xnastudioMathHelper.Lerp()
函数熟悉它。很抱歉,我无法提供更多特定于Java的帮助。我已尝试使其尽可能简单。。。后来,当我更新游戏时,让它有时弯曲,有时弯曲……上面的伪代码是一个“直线”算法,可以将其向目标坐标移动5个单位(斜边)。@Justin谢谢,但为什么需要距离?这不会使它在朝向目标目的地的过程中改变速度吗?不,你除以距离是因为类似的三角形()。如果我在距离较远的地方,并且我想朝距离移动速度数量。我需要在X方向上按比例将moveX
移出deltaX
,与Y方向相同。由于类似的三角形,distance/speed=deltaX/moveX
。我只是在为moveX
@Justin解决移动X和移动Y是一个很大的数字。。。他们只是飞离屏幕。。。我试着调整速度…但还是很可笑。。。