2011-10-06 35 views
-1

我有一系列的計算,我正在做一堆存儲在數組中的對象。每個功能都非常需要CPU,但是如果你只運行一個功能,它就可以正常工作。 這裏,瑪:AS3調用函數中的函數並避免玩家崩潰/掛起?

var array:Array = new Array(); 

function a():void{ 
    //Do some stuff with array 
b(); 
} 

function b():void{ 
    //Do some stuff with array 
c(); 
} 

function c():void{ 
    //Do some stuff with array 
d()... 
} 

早在AS2.0,我發現,如果我的函數(如200毫秒)的通話之間跑了一個很短的「吐溫」,我可以讓玩家不會崩潰/掛機

var t:Tween = new Tween(... 
t.onMotionFinished = function(){ 
b(); 
} 

我正在尋找一個更 「傳統」 的方式:)

+0

這是在遊戲設置?比如,你計算的是檢查碰撞,檢查視線等嗎? – Marty

+0

不,只是一堆數字操作,而不是遊戲相關。 – Eric

+0

啊,夠公平的。我想我只是錯誤地使用了「玩家」這個詞。真正取決於你採用什麼路線的應用程序。 – Marty

回答

1

您可以使用Timer

var timer:Timer = new Timer(200,0); 
timer.addEventListener(TimerEvent.TIMER,timerHandler); 

... 

protected function timerHandler(e:Event):void { 
    b(); 
} 
+0

是的,我可以寫一個TimerManager,它存儲一個函數的數組來執行數組,這將工作 – Eric

0

可以使用蒂默,或者你可以做這樣的事情:

var oldTime:Number = getTimer(); 
var thisTime:Number = 0; 

var counter:int = 0; 
var functions:Vector<Function> = new Vector<Function>(); 
functions.push(a,b,c); 

addEventListener(Event.ENTER_FRAME, onLoop); 

private function onLoop(e:Event):void 
{ 
    var resultTime:Number = getTimer() - oldTime; 
    if(resultTime > 200) 
    { 
     functions[counter].call(); 
     ++counter; 
     oldTime += resultTime; 
     if(counter >= functions.length) 
     { 
     counter = 0; 
     removeEventListener(Event.ENTER_FRAME,onLoop); 
     } 
    } 
} 

只需添加ENTER_FRAME偵聽器時執行需要啓動。我沒有詳細檢查代碼,但我希望能爲你工作...