2011-02-08 4 views
1

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

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

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

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

Скажем, точка А составляет 10, 10; а точка B - 123, 349. Но есть вероятность, что A будет B, а B будет A. Таким образом, он также должен иметь дело с негативами.

Теперь последнее, что усложняет вопрос, состоит в том, что он перемещается между 1 и 5 пикселями при каждом его перекрашивании ... так что если он переместится по позиции, я не уверен, как проверить, чтобы она была в общей области ,

Спасибо! Btw Мне не нужен полный код ... просто ИДЕИ !!! Я могу закодировать себя. Спасибо!!!

текущий код:

   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

Как выглядит ваш текущий алгоритм? –

+0

@ Justin там вы идете, вот что у меня есть сейчас ... the enemyList хранит 4 переменные ... currentX, currentY, futureX, futureY ... будущее означает назначение ... надеюсь, что поможет вам помочь мне :) – Zeveso

+2

I ' m не уверен в специфике среды Java, но это обычно делается с линейной интерполяцией. Из быстрого поиска Google это может быть класс для этого: http://multigraph.sourceforge.net/multigraph/javadoc/multigraph/LinearInterpolator.html –

ответ

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

+0

попытался сделать это как можно скорее ... и позже, когда я обновляю игру, иногда она прогибается и иногда изогнута ... – Zeveso

+0

Вышеупомянутый псевдокод - это «прямой» алгоритм, который будет перемещать его на 5 единиц (на гипотенузу) в направлении целевые координаты. –

+0

@ Justin спасибо, но зачем вам расстояние? разве это не изменит скорость, поскольку она идет к целевому назначению? – Zeveso

Смежные вопросы