2014-03-29 3 views
6

Я начинаю работу с Haxe и OpenFl и имею опыт работы с Javascript и Lua.
Все шло хорошо, пока я не добрался до точки, где мне нужна функция, аналогичная wait() в Lua и т. Д., Которая останавливает скрипт до тех пор, пока не будет установлено количество секунд.Подождите() в Haxe?

Как бы я это сделал?

EDIT: Чтобы уточнить, я создаю Flash.

ответ

5

Хотя это старый, я хотел бы добавить еще один пункт для справки. OP упомянул в комментарии, что это было для игры. Один метод, который я часто использую (и, вероятно, может быть помещен в библиотеку):

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

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

В SYS вы ищете:

статические функции сна (секунд: Float): Пустота приостановить текущее выполнение на заданное время (в секундах).

Пример: Sys.sleep(.5);

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

Редактировать: Пользователь перенос мигать.

Так что предложение использовать таймер

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

В Таймера предложение заключается в использовании статической задержки функции (F: Пустота -> Пустота, time_ms: Int): Таймер

Someone при переполнении стека имеет пример, который выглядит так: haxe.Timer.delay (callback (someFunction, "abc"), 10); расположенный здесь ... Pass arguments to a delayed function with Haxe

+0

К сожалению, забыл упомянуть, я строю на Flash, и Sys поддерживает только Неко, PHP, C++, CS и Java, так Я получаю «Доступ к этому полю требует системной платформы (php, neko, cpp и т. Д.)», Когда я пытаюсь построить при использовании 'Sys.sleep()' – IBPX

+0

Я знаю, что вы можете сделать 'haxe.Timer.delay (a, b) 'делать' a' после 'b' миллисекунд, но остальная часть скрипта не ждет его. Есть ли какая-то комбинация '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. */} 
    } 
} 
Смежные вопросы