我希望以任何角度加速玩家。我在电晕游戏引擎中尝试这个,它为我们提供了内置的物理引擎。我知道加速度是速度和时间的变化率,但我如何在代码中应用它?我如何以任何角度加速它?
这是我试过的:
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 :(得分: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
,您只需将cos
更改为sin
。如果您选择不使用角度更新它,您只需单独更新每个方向:
velocity_x = velocity_x + acceleration_x*deltaTime;
velocity_y = velocity_y + acceleration_y*deltaTime;