在2D中移动敌人?

时间:2011-02-08 02:28:13

标签: java image geometry

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

起始位置不是问题......也不是他们想去的地方。

问题在于他们如何到达那里。根据我写的代码,他们只是传送出地图。

所以我甚至不打算发布它。使用三角形......从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;
                }
            }

1 个答案:

答案 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;

我使用类似的三角形来计算moveXmoveY。请注意,平方根很慢,但这可能适合您的目的......一旦有了它,就有办法优化平方根。