Я разрабатываю 2-й космический шутер с LOVE2D в Lua, и поскольку я не математик и физик, у меня возникли вопросы с реализацией поведения рулевого управления для врагов ,Изменить угол (поворот) объекта в рулевом управлении (поиск) в игре 2d
я, наконец, удалось сделать врага «ищет» для игрока, и это выглядит следующим образом:
код, который делает его работу (формула берется из этого ответа - https://stackoverflow.com/a/2561054/2117550):
function Enemy:seek()
local dx = self.player.x - self.x - self.xvel
local dy = self.player.y - self.y - self.yvel
-- normalize
local len = math.sqrt(dx * dx + dy * dy)
dx, dy = dx/len, dy/len
return dx, dy
end
Затем я использую мой seek
функцию в update
:
function Enemy:update (dt)
-- seeking acceleration
local dx, dy = self:seek()
-- what is the proper way of calculating enemies rotation?
-- self.rotation = math.atan2(dx, dy) + ANGLE_ACCELERATION * dt
-- update velocity
self.xvel = self.xvel + dx * MAX_SPEED * dt -- * math.cos(self.rotation) it's not needed anymore?
self.yvel = self.yvel + dy * MAX_SPEED * dt -- * math.sin(self.rotation) it's not needed anymore?
-- moving entity in camera
_.checkWorldBounds(self)
local futureX = self.x + self.xvel * dt
local futureY = self.y + self.yvel * dt
local nextX, nextY, collisions, len = self.world:move(self, futureX, futureY, self.collisionFilter)
self.x = nextX
self.y = nextY
self.xvel = self.xvel * 0.99
self.yvel = self.yvel * 0.99
end
Итак, единственная проблема в том, что вращение врага не меняется, хотя перед космическим кораблем всегда следует смотреть в сторону игрока.
Я пробовал с math.atan2(dx, dy)
, но он постоянно меняет сущность.
Чего не хватает или что я делаю не так?
Я не ищу кого-то, чтобы закодировать это для меня (хотя это было бы очень приятно), но некоторые формулы или советы будут высоко оценены.
Если вы заинтересованы исходный код доступен по адресу - https://github.com/voronianski-on-games/asteroids-on-steroids-love2d
Что не так с 'self.rotation = math.atan2 (dx, dy)'? –
@EgorSkriptunoff Я пробовал с math.atan2 (dx, dy), но он постоянно менял объект – Kosmetika
Да, Враг всегда будет смотреть прямо на Игрока. Разве это не то, что вы хотите? –