2017-01-25 2 views
1

Я пытаюсь сделать простой платформер в love2D. В настоящее время у меня есть класс моего игрока среди других вещей (класс обработки столкновений, классы уровней и т. Д.)Прыжки с гравитацией и столкновением

Основная проблема, с которой я сталкиваюсь, - прыгать. Я просто не могу заставить его работать правильно.

Когда я прыгаю, игрок становится слишком быстрым, чтобы на самом деле сделать прыжок полезным. Почему это происходит? Это код, перенесенный из ROBLOX, и в ROBLOX Studio, скачок работает нормально.

Это внутри функции обновления проигрывателя, который называется каждый кадр из love.update:

if not love.keyboard.isDown("a") and not love.keyboard.isDown("d") then 
    self.Velocity=self.Velocity * Vector2.new(0.95,1) 
end 
if self.Velocity.Y < -self.maxFallVel then 
    self.Velocity=Vector2.new(self.Velocity.X,self.maxFallVel) 
end 
if love.keyboard.isDown("d") and self.Velocity.X<self.maxVel and not love.keyboard.isDown("a") then 
    self.Velocity = self.Velocity+Vector2.new(.1,0) -- right movement 
end 
if love.keyboard.isDown("a") and self.Velocity.X<self.maxVel and not love.keyboard.isDown("d") then 
    self.Velocity = self.Velocity-Vector2.new(.1,0) -- left movement 
end 
if love.keyboard.isDown("space") and self.hasCollision and not self.Jumped then 
    if self.Velocity.Y == 0 then 
     self.Velocity.Y = -30 
    end 
end 
self.Position=self.Position+Vector2.new(self.Velocity.X,self.Velocity.Y) 
if not self.hasCollision then self.Velocity.Y = self.Velocity.Y - self.Gravity end 

При проверке столкновений внутри файла main.lua, который где я установить переменную self.hasCollision в правда или ложь.

ответ

1
if self.Velocity.Y < -self.maxFallVel then 
    self.Velocity=Vector2.new(self.Velocity.X, -self.maxFallVel) -- minus! 
end 
... 
-- multiply by dt 
self.Position=self.Position+Vector2.new(self.Velocity.X,self.Velocity.Y)*dt 
if not self.hasCollision then 
    self.Velocity.Y = self.Velocity.Y - self.Gravity*dt 
end 
Смежные вопросы