Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在2D中移动敌人?_Java_Image_Geometry - Fatal编程技术网

Java 在2D中移动敌人?

Java 在2D中移动敌人?,java,image,geometry,Java,Image,Geometry,基本上我想把我的敌人从一个位置转移到另一个位置 开始的位置没有问题。。。他们要去的地方也不是 问题在于他们如何到达那个里。用我写的代码,他们只是从地图上传送出去 所以我甚至不打算把它贴出来。使用三角形。。。从A点到B点最有效的方法是什么 假设A点是10,10;B点是123349。但是也有可能A是B,B是A,所以它也必须处理否定 现在最后一件使问题复杂化的事情是,它每次重新绘制时都会在1到5像素之间移动。。。因此,如果它超过了位置,我不知道如何检查,看看它是否在一般地区 谢谢!顺便说一句,我不需要

基本上我想把我的敌人从一个位置转移到另一个位置

开始的位置没有问题。。。他们要去的地方也不是

问题在于他们如何到达那个里。用我写的代码,他们只是从地图上传送出去

所以我甚至不打算把它贴出来。使用三角形。。。从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之间的权重值将对象移动到这条线上。权重值应视为百分比。随着重量的增加,对象将从起点移动到终点。我通过微软的xnastudio
MathHelper.Lerp()
函数熟悉它。很抱歉,我无法提供更多特定于Java的帮助。我已尝试使其尽可能简单。。。后来,当我更新游戏时,让它有时弯曲,有时弯曲……上面的伪代码是一个“直线”算法,可以将其向目标坐标移动5个单位(斜边)。@Justin谢谢,但为什么需要距离?这不会使它在朝向目标目的地的过程中改变速度吗?不,你除以距离是因为类似的三角形()。如果我在距离较远的地方,并且我想朝距离移动速度数量。我需要在X方向上按比例将
moveX
移出
deltaX
,与Y方向相同。由于类似的三角形,
distance/speed=deltaX/moveX
。我只是在为
moveX
@Justin解决移动X和移动Y是一个很大的数字。。。他们只是飞离屏幕。。。我试着调整速度…但还是很可笑。。。