2016-02-02 11 views
1

Моя игра представляет собой простой 2D стиль сверху вниз. У меня уже есть враги, следующие за игроком, но я не знаю, как заставить врагов встретиться с ним. Я даже не знаю, с чего начать.Как сделать врагов лицом игрока

Вот мой код, чтобы сделать врагов следовать за игроком:

if (enemy.x > player.x){ 
     enemy.x -= 7; 
}else { 
     enemy.x += 7; 
{ 
if (enemy.y > player.y){ 
     enemy.y -= 7; 
}else { 
     enemy.y += 7; 
{ 
+0

Вы хотите, чтобы противник оказался лицом к игроку ровно (360 градусов) или только 8 направлений, против которых движется ваш враг? – Aaron

+0

Вы поняли это? –

ответ

2

Я предполагаю, что у вас есть переменная, определяющая направление противника. Кроме того, предполагая, что вы просто используете четыре кардинала направлений.

Вы можете просто провести сравнение врагов. x, y Координаты по сравнению с игроками.

код Суд:

if enemy x > player x // player is to the left of the enemy 
    enemy face left 
else if enemy x < player x // player is to the right of the enemy 
    enemy face right 
else if enemy y > player y // player is below the enemy 
    enemy face down 
else 
    enemy face up 

Это сделает ваши враги почти всегда сталкиваются влево/вправо. Вы можете получить больше участия, как только получите эту работу, сравнив дельт врага. x/y по сравнению с игроком x/y.

Что-то вроде:

delta x = abs(player x - enemy x) 
delta y = abs(player y - enemy y) 

if delta x > delta y // Enemy is further away on the x axis than the y axis 
    make a choice of facing left/right 
else 
    make a choice of facing up/down 

Надеется, что это поможет вам начать работу.

2

Если вы хотите, чтобы противник к лицу именно в сторону игрока, другими словами, на 360 градусов, вы можете вычислить угол между enemy и player и использовать rotation свойство, как это:

var angle:Number = Math.atan2(player.y - enemy.y, player.x - enemy.x) * (180/Math.PI); 
enemy.rotation = angle; 

Чтобы это выглядело правильно, вы должны сделать свою учетную запись enemy в ее центре, чтобы она вращалась вокруг ее центра, и нарисуйте ее в обратном направлении, так что угол 0 обращен вправо.

+0

Я использовал этот метод. Враг сталкивается с игроком. Но он не чист, и он не всегда сталкивается с игроком напрямую var angle: Number = Math.atan2 (myCar.y - mc_enemyCar02.y, myCar.x - mc_enemyCar02.x) * (180/Math.PI); \t \t \t mc_enemyCar02.rotation = angle; – rtpenick

+0

Не уверен, что вы подразумеваете под «чистым» и «прямым», но он * всегда будет сталкиваться с игроком точно, если ваши «myCar» и «mc_enemyCar» находятся в одном контейнере. В противном случае вам придется преобразовать координаты вашего автомобиля в пространство координат вражеского автомобиля: 'var car: Point = enemyCarsContainer.globalToLocal (myCar.localToGlobal (new Point())'. Также убедитесь, что ваш вражеский автомобиль нарисован * точно направлен вправо *. Математика правильная, ваша графика может быть неправильной. – Aaron