Спящий в действии сценарий 2 с использованием метода getTimer()

Как я могу правильно выполнить что-то вроде sleep использовать функцию getTimer()? Мне нужно делать действие каждые 15 секунд. Код ниже не работает. Я собираю это с mtasc Компилятор на Linux.

class Tuto
{
static var lastMsg = 0;
static var msgInt = 15000;

  static function main(mc)
  {

    if(getTimer() > lastMsg + msgInt)
      {
         trace("something");
         lastMsg = getTimer();
      }

  }

}

1 ответ

Решение

main Инструкция будет выполнена только один раз. Вы должны создать какой-то цикл или полагаться на тиковые события, посылаемые игроком, чтобы выполнять ваш код непрерывно.

Основные варианты:

while (true) { doSomething() }

это будет выполняться вечно, но помните, что flashplayer является однопоточным, поэтому при запуске все остальное будет заморожено, включая пользовательский интерфейс и пользовательский ввод. это только "хорошо", если вы создаете какой-то тяжелый инструмент обработки, который не нуждается во взаимодействии с пользователем.

setInterval(doSomething, 15000)

это создает интервал, который будет вызывать вашу функцию каждые X миллисекунд. Это самый простой вариант и, вероятно, то, что вы ищете.

addEventListener(Event.ENTER_FRAME, doSomething)

при этом регистрируется прослушиватель события ENTER_FRAME Flash Player, которое будет отправляться 30 раз в секунду (по умолчанию). Внутри этой функции вы можете проверить текущее время с помощью getTimer() и решить, пора ли выполнить вашу логику.

Другие вопросы по тегам