Итак, я создал базовую систему столкновений в love2D, используя базовый ООП.Столкновение и ООП в lua
function love.update(dt)
player:update(dt)
for _, rect in pairs(randomRectangles) do
local collides,mtv,side = collider:collidesMTV(player,rect)
if collides then
print(side)
player:collide(collides,mtv,side)
end
end
end
МТВ быть минимальный перевод, чтобы переместить часть, когда она сталкивается, а сторона является стороной она сталкивается с.
Проблема заключается в том, я хочу быть в состоянии сделать это так, в плеере: сталкиваюсь функции, как показано здесь:
function player:collide(colliding,mtv,side)
if colliding==true and side=="top" or colliding==true and side == "bottom" then
self.Position=self.Position-mtv
end
if colliding==true and side=="left" or colliding==true and side == "right" then
self.Position=self.Position-mtv
self.Gravity=-0.1
end
if not colliding and self.Gravity ~= -0.95 then
self.Gravity=-0.95
end
end
я могу сделать это так, когда это не сталкивающееся, он устанавливает гравитацию обратно нормальный, но если я добавлю elseif/else заявление внутри, когда он не сталкивается, он также будет делать это, если он сталкивается с одним блоком, так как на экране есть еще 30 других блоков и не будет устанавливать силу тяжести на -0.1, всегда будем возвращать его к нормальной гравитации, если это имеет смысл.
Как это исправить?
Но я имею дело с ним на уровне игрока (если вы имеете в виду внутри файла player.lua)? love.update находится в совершенно другом файле - файле main.lua. – Ducktor
Прошу прощения, мой комментарий был не очень ясен! Я имел в виду, что это не должно рассматриваться в каждом отдельном столкновении. Я обновлю свое решение, так как не заметил, что направление столкновения важно. – SolarBear
Спасибо, теперь он отлично работает! – Ducktor