2014-03-29 37 views
6

我開始使用Haxe和OpenFl,並且有一些Javascript和Lua的使用經驗。
它一直很好,直到我需要一個類似於lua中的wait()的函數,它會停止腳本,直到您設置的秒數結束。

我該如何去做這件事?

編輯:澄清,我正在建設Flash。

回答

5

雖然這是老了,我想再添點以供參考。 OP在評論中提到這是一款遊戲。一種方法是我經常使用的是(而且很可能被放在一個庫):

var timerCount:Float = 0; 
var maxTimerCounter:Float = 5; 

function update() { 
    timerCounter += elapsedTime; 
    if (timerCounter > maxTimerCounter){ 
     onTimerComplete(); 
     timerCount = 0; 
    } 
} 
4

在SYS您正在尋找:

靜態函數睡眠(秒:浮動):虛空 暫停給定時間的當前執行(以秒爲單位)。

實施例:Sys.sleep(.5);

http://haxe.org/api/sys/

編輯:用戶被移植到閃爍。

所以建議是使用定時器

http://haxe.org/api/haxe/timer

在定時器的建議是使用 靜電功能延遲(F:空 - >空,time_ms:智力):定時器

有人堆棧溢出有一個例子,看起來像這樣:haxe.Timer.delay(callback(someFunction,「abc」),10);位於這裏... Pass arguments to a delayed function with Haxe

+0

對不起,忘了提我建立到Flash,和SYS只支持ネ,PHP,C++,CS,和Java,所以當我嘗試使用'Sys.sleep()' – IBPX

+0

進行編譯時,我得到一個'訪問這個字段需要一個系統平臺(php,neko,cpp等)'錯誤'我知道你可以做'haxe.Timer.delay a,b)'在'b'毫秒後做'a',但腳本的其餘部分不會等待它。是否有某種可以使用的'this.stop()'和'this.resume()'類型的組合? – IBPX

+0

您需要延遲多久?你是在等待一個流程,還是你在等待用戶輸入? –

0

對於Flash編譯目標,最好你可以做的是使用一個計時器,以及像這樣的setTimeout()函數。 這意味着將你的函數分成兩部分 - setTimeout()之前的所有內容,以及之後的所有內容,它們都在一個單獨的函數中,並且超時可以調用。 所以somethine等,例如:

tooltipTimerId = GlobalTimer.setTimeout(
    Tooltip.TOOLTIP_DELAY_MS, 
    handleTooltipAppear, 
    tootipParams 
); 

[...] 

class GlobalTimer { 
    private static var timerList:Array<Timer>; 

    public static function setTimeout(milliseconds:Int, func:Dynamic, args:Array<Dynamic>=null):Int { 
     var timer:Timer = new Timer(milliseconds); 
     var id = addTimer(timer, timerList); 
     timer.run = function() { 
      Reflect.callMethod(null, func, args); 
      clearTimeout(id); 
     } 
     return id; 
    } 

    private static function addTimer(timer:Timer, arr:Array<Timer>):Int { 
     for (i in 0...arr.length) { 
      if (null == arr[i]) { 
       arr[i] = timer; 
       return i; 
      } 
     } 
     arr.push(timer); 
     return arr.length -1; 
    } 

    public static function clearTimeout(id:Int) { 
     var timers:Array<Timer> = GlobalTimer.getInstance().timerList; 
     try { 
      timers[id].stop(); 
      timers[id] = null; 
     } catch(e:Error) {/* Nothing we can do if it fails, really. */} 
    } 
}