2016-07-25 45 views
0

我想加速一个玩家在任何角度它指着英寸我试图在电晕游戏引擎,它提供了我们内置的物理引擎。我确实知道加速度是速度和时间的变化率,但我如何将它应用于代码?我怎么加速它在任何角度?如何加速一个特定方向的太空飞船(Corona SDK)

这里是我的尝试:

player.angle = 30 
player.speed = 20 
player.acceleration = 2 
print(player.angle) 
local scale_x = math.cos(player.angle) 
local scale_y = math.sin(player.angle) 

local function acceleratePlayer (event) 

if(event.phase=="began") then 

player.speed = player.speed + player.acceleration 

player.velocity_x = player.speed * scale_x 
      player.velocity_y = player.speed * scale_y 
      player.x = player.x + player.velocity_x 
      player.y = player.y + player.velocity_y 
    end 
end 
+0

应该将accelerating_angle与player.angle类似吗?或者我应该将其转换为弧度值? – Nit

回答

0

当你的状态,加速度是速度和随时间的变化。你会在代码中写为

velocity = velocity + acceleration*deltaTime 

这里deltaTime是你最后的速度更新时间变化。您在上面的代码中使用了deltaTime = 1

要以任何角度加速,加速度需要有两个参数。根据你想要的,你可以添加另一个acceleration_angle将其定义为acceleration_x,acceleration_y - 这两个作品和你选择的可能取决于你的感觉是更直观/更适合你的问题。从加速

更新速度是依赖角度:

// acceleration is relative to player 
velocity_x = velocity_x + acceleration*cos(player.angle + acceleration_angle)*deltaTime; 
// acceleration is *not* relative to player 
velocity_x = velocity_x + acceleration*cos(acceleration_angle)*deltaTime; 

对于y你只需改变cossin。如果选择不使用角度进行更新,则只需单独更新每个方向:

velocity_x = velocity_x + acceleration_x*deltaTime; 
velocity_y = velocity_y + acceleration_y*deltaTime; 
+0

非常感谢!我会尝试这种方法!并更新我的状态 – Nit