2011-10-03 71 views
0

比方說,我們建立一個遊戲,我們有一個玩家角色。在遊戲中角色會做很多動作,如散步,跳,攻擊,搜索目標等:速度優化 - 哪個更好?

public class Player extends MovieClip 
{ 
    public function Player(){} 
    private function walk(){} 
    private function attack(){} 
    private function jumping(){} 
    ... 
    .. 
    . 
    private function update(){} 
} 

現在,對於每一個國家或行動,我們要執行不同的代碼。現在,如何做到這一點?我可以想到3種方法。

1.採用事件 - 據我所知,事件系統是昂貴的使用,所以我會跳過這一個。 2.在更新簡單的檢查() - 像如果(currentStateAction){} doSomethingHere或switch語句。但是,如果這些行爲不是相互排斥的,例如它可以在同一時間跳躍和攻擊?我們必須對每個動作使用if(),例如對每一幀進行檢查。 3.我想到了我自己的這個解決方案,我需要知道的是這不是選項2號更好:

//declare Dictionary. Here we will add all the things that needs to be done 
public var thingsToDo:Dictionary = new Dictionary(true); 

//in the update function we check every element of the dictionary 
private funciton update():void 
{ 
    for each(item:Function in thingsToDo) 
    { 
    item.call(); 
    } 
} 

現在,每當我們需要做一些事情的時候,我們添加一個元素,像thingsToDo[attack]=attack; 或者,如果我們不想再做某件事:delete thingsToDo[attack];

在這個......系統中......你不需要檢查每一幀,對象應該做什麼,而是隻需要檢查什麼時候需要。這就像一個事件驅動系統。例如說,對象不需要檢查攻擊,直到新敵人產生。所以。當遇到新的敵人時,你會添加東西[攻擊] =攻擊;等

所以問題:這是不是選項號3更快?任何想法如何做這個檢查不同? 謝謝。

回答

2

你或許應該集中精力使它的工作您想要的方式(靈活,易於維護和修改),而不是使之儘可能快。這是不太可能成爲真正的瓶頸。

過早的優化是所有罪惡的根源,以及所有。