2013-08-02 75 views
0

我有這個代碼設置,以便它根據其大小改變船的力。我該如何做得更好?

function activateFly(ship, event) 
    if(size == 0) then 
     ship:applyForce(0, -2.5, ship.x, ship.y) 
     print("FLY SIZE 0")  
    elseif(size == 1) then 
     ship:applyForce(0, -2.3,ship.x, ship.y) 
     print("FLY SIZE 1") 
    elseif(size == 2) then 
     ship:applyForce(0, -2.0, ship.x, ship.y) 
     print("FLY SIZE 2") 
    elseif(size == 3) then 
     ship:applyForce(0, -0.8, ship.x, ship.y) 
     print("FLY SIZE 3") 
    end 
end 

這意味着我需要爲所有不同的大小編寫無盡的if-else語句。我問的是,如果有一個代碼,我可以將大小變量存儲起來,將其乘以某個數字並正確設置力量?這樣我就不需要編寫所有這些語句。

+5

這個問題似乎是無關緊要的,因爲它是關於代碼審查,並且會在[codereview.SE] – hjpotter92

回答

4

你的意思是這樣的嗎?

local forceMap = { 
    [0] = -2.5, 
    [1] = -2.3, 
    [2] = -2.0, 
    [3] = -0.8, 
} 

function activateFly(ship, event) 
    ship:applyForce(0, forceMap[size], ship.x, ship.y) 
    print("FLY SIZE "..size) 
end 

如果你碰巧有一個方法來計算從尺寸上的力,你可以儘量避免使用映射表,並使用數學來代替。

+1

上獲得更好的響應您可能希望將'forceMap'的定義移到該函數之外,以避免創建表每次通話。 – lhf

+0

好點,編輯。我通常在我的代碼中這樣做。 –

+0

是這樣的事情,但我怎麼得到這個工作?我是否將ForceMap值添加到gameloop中?我如何得到它與我目前有的大小變量一起工作? –

相關問題