如何在特定方向加速飞船(Corona SDK)

时间:2016-07-25 13:56:58

标签: math lua corona game-physics

我希望以任何角度加速玩家。我在电晕游戏引擎中尝试这个,它为我们提供了内置的物理引擎。我知道加速度是速度和时间的变化率,但我如何在代码中应用它?我如何以任何角度加速它?

这是我试过的:

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

1 个答案:

答案 0 :(得分:0)

正如您所说,加速度是速度和时间的变化。您可以在代码中将其写为

velocity = velocity + acceleration*deltaTime

此处deltaTime是您上次速度更新的时间变化。您在上面的代码中使用了deltaTime = 1

要在任何角度加速,加速度需要有两个参数。根据您的需要,您可以添加另一个acceleration_angle 将其定义为acceleration_xacceleration_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,您只需将cos更改为sin。如果您选择不使用角度更新它,您只需单独更新每个方向:

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