Каталог статей

Сообщение Действие Wait (ожидание)
» 13 фев 2014, 13:24

Действие Wait (ожидание)


Действие Wait в системном объекте заставляет приложение ждать заданное в секундах количество времени до того, как запустить новое действие. В течение ожидания другие события продолжают действовать как обычно.







 Примеры





Первый пример, без действия Wait

  • On spacebar pressed (при нажатии пробела).
    • Player: spawn a bullet (создать объект пуля на спрайте игрока).
    • Audio: play 'bang' sound (проиграть звук пули).
Результат: при нажатии на пробел, ваша пуля будет создана и выпущена со звуковым эффектом немедленно.

Второй пример, с действием Wait

  • On spacebar pressed.
    • System: wait 1 second (системный объект, ждать 1 секунду).
    • Player: spawn a bullet.
    • Audio: play 'bang' sound.
Результат: если вы нажмете на пробел, будет секундная задержка, потом пуля выстрелит, сопровождаемая звуком. Если вы дважды быстро нажмете пробел, то создадите очередь и 2 пули будут выпущены, каждая через секунду после своего нажатия.

Третий пример

  • On start of layout.
    • Text: set text to "Hello there!" & newline (объект текста, установить текст на "Привет", добавить новую строку).
    • System: wait 1 second (подождать 1 секунду).
    • Text: append text "How are you?" & newline (добавить к существующему тексту новый, спросив "Как дела?", добавить новую строку).
    • System: wait 1 second.
    • Text: append text "Nice to meet you!" (добавить текст "Приятно тебя видеть").
Результат: это событие добавляет каждое сообщение к текстовому объекту через односекундные интервалы. Не забывайте, что остальные события продолжают работать, пока ожидающие ждут. В любом событии можно установить требуемое количество ожиданий и они все будут запущены по расписанию.

Четвёртый пример

  • Every 1 second (условие каждую секунду).
    • Sprite: set invisible[ (сделать спрайт невидимым).
    • System: wait 0.3 seconds.
    • Sprite: set visible (сделать спрайт видимым).
Результат: мигание спрайта.

Пятый пример

  • Every 2 seconds.
    • Enemy: spawn 'bullet[/b]'.
    • System: wait 0.2 seconds.
    • Enemy: spawn 'bullet'.
    • System: wait 0.2 seconds.
    • Enemy: spawn 'bullet'.
Результат: каждые 2 секунды противник стреляет сериями по 3 пули, каждая из которых идет с задержкой в пятую часть секунды.

Шестой пример. Использование ожидания внутри цикла

  • On start of layout (на старте уровня).
  • Repeat 10 times (повторить десять раз).
    • System: wait loopindex seconds (ждать количество секунд, равное индексу витка цикла).
    • Text: append text "Time = " & time & newline (добавить текст "Время =", добавить текущее время, добавить новую строку).
Результат: это событие будет создавать к текстовому объекту текст каждую секунду в течение 10 секунд. "Repeat 10 times" запускает действие 10 раз и каждый виток задает время ожидания относительно начала выполнения цикла на 1 больше (так как индекс цикла с каждым витком увеличивается на 1).

Седьмой пример.

  • On start of layout.
  • Repeat 10 times.
    • Wait 1 second.
    • Append text "Time = " & time & newline.
Результат: когда срабатывает первое ожидание, цикл продолжает работу (потому что остальная часть списка событий имеет независимость от встроенного в каждое отдельное событие действия ожидания). Поэтому цикл будет полностью выполнен, запланировав 10 действий "добавить текст" после 1 секундной отсрочки. После 1 секунды 10 действий будут запущенны в одной время. Если это не то, что вам нужно, попробуйте использовать системное условие Every X seconds (каждые Х секунд) или используйте пример 6 с loopindex.



Тонкости

  • Действие Wait сохраняет полное состояние SOL и отменяет текущее событие. Когда время ожидания истекает, загружается полное SOL (минус те объекты, которые были уничтожены за время ожидания) и событие продолжает выполнение, наяиная с действия следующего за действием ожидания. Также продолжает выполнение всех подсобытий. Если в любой другой точке события встречается другое действие ожидания, то процесс повторяется, так что вы можете запускать разные части вашего события в разное время.
  • "Wait 0 seconds" откладывает следующие за ожиданием действия внутри события в конец списка событий.

Заключение
Очень мощная возможность. Если вы когда-либо использовали Construct Classic вы найдете это решение гораздо более элегантным, чем функцию объекта "call after delay" (вызвать после задержки).
Источник
Последний раз редактировалось equinox 14 фев 2014, 01:15, всего редактировалось 1 раз.
Аватара пользователя

Игродел
Сообщений: 49
Я тут с 07 фев 2014, 17:28
Откуда: Санкт-Петербург, Москва