2017-01-25 4 views
1

Ich versuche, ein einfaches Platformer in Love2D zu machen. Momentan habe ich meine Spielerklasse unter anderen Sachen (Kollisionshandhabungsklasse, Level-Klassen usw.).Springen mit Schwerkraft und Kollision

Das Hauptproblem, das ich habe, ist Springen. Ich kann es einfach nicht richtig funktionieren lassen.

Wenn ich hüpfe, wird der Player zu schnell heruntergezogen, um den Sprung nützlich zu machen. Warum passiert dies? Dies wird von ROBLOX Code-portiert, und in ROBLOX Studio funktioniert das Springen normalerweise. Diese

ist innerhalb der Update-Funktion des Players, die jeder Rahmen aus love.update genannt wird:

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 

Wenn ich für Kollisionen in der main.lua Datei überprüfen, dort habe ich die Variable self.hasCollision zu richtig oder falsch.

Antwort

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