我开始使用 Haxe 和 OpenFl,并且对 Javascript 和 Lua 有一些经验。
它进行得非常好,直到我需要一个类似于wait()
Lua 等中的函数,它会停止脚本,直到你设置的秒数结束。
我该怎么做呢?
编辑:澄清一下,我正在构建 Flash。
虽然这很旧,但我想补充一点以供参考。评论中提到的 OP 这是针对游戏的。我经常使用的一种方法是(并且可能放在库中):
var timerCount:Float = 0;
var maxTimerCounter:Float = 5;
function update () {
timerCounter += elapsedTime;
if (timerCounter > maxTimerCounter){
onTimerComplete();
timerCount = 0;
}
}
在 SYS 中,您正在寻找:
static function sleep( seconds : Float ) : Void 将当前执行暂停给定时间(以秒为单位)。
例子:Sys.sleep(.5);
编辑:用户正在移植到闪存。
所以建议是使用 Timer
http://haxe.org/api/haxe/timer
在 Timer 中,建议使用静态函数 delay( f : Void -> Void, time_ms : Int ) : Timer
堆栈溢出的人有一个看起来像这样的例子:haxe.Timer.delay(callback(someFunction,"abc"), 10); 位于此处...使用 Haxe 将参数传递给延迟函数
对于 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. */}
}
}