Перемещение врага в 2D? - PullRequest
       3

Перемещение врага в 2D?

1 голос
/ 08 февраля 2011

В основном я хочу переместить своего врага из одной позиции в другую.

Там стартовая позиция не проблема ... и не то место, куда они должны идти.

Проблема заключается в том, как они туда попадают. С кодом, который я написал, они просто телепортируются с карты.

Так что я даже не собираюсь публиковать это. Используя треугольники ... какой самый эффективный способ доставить их из точки А в точку Б?

Допустим, точка А равна 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 Ответ

2 голосов
/ 08 февраля 2011

Судя по коду, похоже, что ваш враг будет как бы искривляться к месту назначения, возможно, изогнутым образом, но это трудно определить просто осмотром.Может быть, вам просто нужно поменять местами источник и пункт назначения, потому что, похоже, у вас может быть просто назад:

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.Обратите внимание, что квадратный корень медленный, но для ваших целей это может подойти ... как только он заработает, есть способы оптимизировать квадратный корень.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...