Символ позиции, основанный на координатах противника в lua

Jay спросил: 12 мая 2018 в 05:01 в: lua

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

local myPosition = {x = 350, y = 355}
local enemyPosition = {x = 352, y = 354}
local xValue, yValue, xDir, yDir, dirif myPosition.x > enemyPosition.x then
    xValue = myPosition.x - enemyPosition.x
elseif myPosition.x < enemyPosition.x then
    xValue = myPosition.x - enemyPosition.x
else
    xValue = 0
endif myPosition.y > enemyPosition.y then
    yValue = myPosition.y - enemyPosition.y
elseif myPosition.y < enemyPosition.y then
    yValue = myPosition.y - enemyPosition.y
else
    yValue = 0
endif xValue < 0 then
    xDir = "TURN RIGHT"
elseif xValue > 0 then
    xDir = "TURN LEFT"
endif yValue < 0 then
    yDir = "TURN DOWN"
elseif yValue > 0 then
    yDir = "TURN UP"
endif xValue > yValue then
    dir = xDir
elseif xValue 
    dir = yDir
endprint("Turn: " .. dir)

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

р >

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

1 ответ

Есть решение
Egor Skriptunoff ответил: 12 мая 2018 в 05:32
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)
Jay ответил: 12 мая 2018 в 07:30
Спасибо, Егор действительно помог мне там