Положение персонажа на основе координат противника в Луа - PullRequest
0 голосов
/ 05 июня 2018

Я написал здесь функцию, которая должна поворачивать моего персонажа на основе координат врага, но она не идеальна, потому что она не всегда поворачивается туда, куда я хочу, и, возможно, есть лучший способ написать это

local myPosition = {x = 350, y = 355}
local enemyPosition = {x = 352, y = 354}
local xValue, yValue, xDir, yDir, dir

if myPosition.x > enemyPosition.x then
    xValue = myPosition.x - enemyPosition.x
elseif myPosition.x < enemyPosition.x then
    xValue = myPosition.x - enemyPosition.x
else
    xValue = 0
end

if myPosition.y > enemyPosition.y then
    yValue = myPosition.y - enemyPosition.y
elseif myPosition.y < enemyPosition.y then
    yValue = myPosition.y - enemyPosition.y
else
    yValue = 0
end

if xValue < 0 then
    xDir = "TURN RIGHT"
elseif xValue > 0 then
    xDir = "TURN LEFT"
end

if yValue < 0 then
    yDir = "TURN DOWN"
elseif yValue > 0 then
    yDir = "TURN UP"
end

if xValue > yValue then
    dir = xDir
elseif xValue 
    dir = yDir
end

print("Turn: " .. dir)

И здесь у вас есть несколько фотографий, чтобы проиллюстрировать, что я имею в виду:

enter image description here


enter image description here


enter image description here

Как видно на рисунках, направление зависит от большего числа.Если X больше, чем Y (отрицательные и положительные значения), поверните символ ВПРАВО или ВЛЕВО в зависимости от того, отрицателен он или положителен.

1 Ответ

0 голосов
/ 05 июня 2018
local myPosition = {x = 350, y = 355}
local enemyPosition = {x = 352, y = 354}

local dx = enemyPosition.x - myPosition.x
local dy = enemyPosition.y - myPosition.y
local directions = {"TURN LEFT", "TURN DOWN", "TURN UP", "TURN RIGHT"}
local dir = directions[(dx > -dy and 2 or 1) + (dx > dy and 2 or 0)]
print("Turn: " .. dir)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...