6

我开始使用 Haxe 和 OpenFl,并且对 Javascript 和 Lua 有一些经验。
它进行得非常好,直到我需要一个类似于wait()Lua 等中的函数,它会停止脚本,直到你设置的秒数结束。

我该怎么做呢?

编辑:澄清一下,我正在构建 Flash。

4

3 回答 3

5

虽然这很旧,但我想补充一点以供参考。评论中提到的 OP 这是针对游戏的。我经常使用的一种方法是(并且可能放在库中):

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

function update () {
    timerCounter += elapsedTime;
    if (timerCounter > maxTimerCounter){
        onTimerComplete();
        timerCount = 0;
    }
}
于 2015-08-06T09:03:35.363 回答
4

在 SYS 中,您正在寻找:

static function sleep( seconds : Float ) : Void 将当前执行暂停给定时间(以秒为单位)。

例子:Sys.sleep(.5);

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

编辑:用户正在移植到闪存。

所以建议是使用 Timer

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

在 Timer 中,建议使用静态函数 delay( f : Void -> Void, time_ms : Int ) : Timer

堆栈溢出的人有一个看起来像这样的例子:haxe.Timer.delay(callback(someFunction,"abc"), 10); 位于此处...使用 Haxe 将参数传递给延迟函数

于 2014-03-29T02:19:48.750 回答
0

对于 Flash 编译目标,您能做的最好的事情就是使用计时器,以及类似 setTimeout() 函数的东西。这意味着将您的函数分成两部分 - setTimeout() 之前的所有内容,以及之后的所有内容,它们位于超时可以调用的单独函数中。所以像这样的东西,例如:

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. */}
    }
}
于 2014-03-29T02:56:27.893 回答