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

我想让玩家在任何角度上加速。我正在尝试使用内置物理引擎的 Corona 游戏引擎。我知道加速度是速度和时间的变化率,但我该如何在代码中应用它?另外,我该如何在任何角度上加速?

下面是我尝试过的代码:

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
点赞
用户3013887
用户3013887

正如您所说,加速度是随时间变化的速度量。您可以在代码中编写此内容,例如:

velocity = velocity + acceleration*deltaTime

在这里, deltaTime 是自上次速度更新以来的时间变化。在您上面的代码中,您使用了 deltaTime = 1

要以任何角度加速,加速度需要有两个参数。根据您想要的内容,您可以添加另一个 acceleration_angle 或将其定义为 acceleration_xacceleration_y——这两者都可以,您选择的可能取决于什么感觉更直观/更适合您的问题。

根据与角度有关的加速度更新速度:

 // 加速度是相对于玩家的
 velocity_x = velocity_x + acceleration*cos(player.angle + acceleration_angle)*deltaTime;
// 加速度 *不是* 相对于玩家的
 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;
2016-07-25 18:39:31