2016-07-25 25 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