Таймер. Несколько видов таймера в играх.

Таймер. Несколько видов таймера в играх.

Данной темы нет, поэтому время и мне внести вклад в разработку и помочь новичкам этой статьей. Данная статья написана максимально понятным языком. Понимаю, Nex, не всем нравится таймер. Но как и было тобой сказано на всё воля автора.
Для начала стоит понимать, что локация $COUNTER - это одноразовый код, который исполнится вам с установленным промежутком времени SETTIMER(в миллисекундах). время указывать до объявления локации.
Создаем локацию таймера и назовём её как захотим. к примеру - counter. Далее в нужной нам локации ставим время, через которое будет исполнен код указанной локации и название(если SETTIMER не указать, то по умолчанию 1 секунда).

Код:

SETTIMER 2000

$COUNTER = 'counter'

Код сверху означает, что локация выполнится через 2 секунды(2000 миллисекунд).
локация $COUNTER одноразова только в тех случаях, когда мы не возвращаемся на данную локацию вновь. Если вам нужно сделать так, чтобы она один раз сработала и больше не включалась даже по возвращению или обновлению локации, тогда делаем так:

Код:

if a = 0:

    SETTIMER 2000
    $COUNTER = 'counter'
    a = a + 1
end

Итак, ниже представлены три распространенных таймера в играх.
1)Таймер без вывода на экран пользователю времени:
Взорви зомби
В данном примере мини игра содержит таймер внутри. Вы не видите его на экране, но время тикает))).
2)Таймер с выводом времени на экран пользователю:
taymer_s_vyivodom_vremeni.qsp
В данном примере игроку показывается обратный отсчёт времени. Можно в начале игры сделать это как константу, заменить в обратном направлении секунды и, по завершению игры, показать игроку сколько времени он играл.
3)Таймер с зависимостью пути от времени.
17022018-0324_mini_igra_vernyiy_put.qsp
Данная мини игра демонстрирует зависимость пути от времени. Данный вид таймера нужен для того, чтобы что-то менялось в режиме реального времени в зависимости от самой игры, а не от игрока. Время в settimer можно контролировать при помощи

Код:

vremya = 1000

settimer <<vremya>>

Таким образом можно в зависимости от действий как добавлять время игроку, так и убирать его.
Так же данный вид таймера нужен для спидран игр.
Остальные нужные вам таймеры можно сделать самостоятельно на основе этих.

ejikplains
useravatar
Offline
50 Сообщений
Информация о пользователе в сообщениях
Администратор отключил публичную отправку сообщений

Re: Таймер. Несколько видов таймера в играх.

ejikplains,
по умолчанию, 500 мс. Т.е. пол секунды.

ejikplains написал(а):

Код сверху означает, что локация выполнится через 2 секунды(2000 миллисекунд).

код локации будет выполняться КАЖДЫЕ две секунды.

ejikplains написал(а):

Если вам нужно сделать так, чтобы она один раз сработала и больше не включалась даже по возвращению или обновлению локации, тогда делаем так:

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

Код:


    SETTIMER 2000
    $COUNTER = 'counter'
! заодно можно поставить запрет на выполнения кода в counter
a=1

А это уже код в counter

Код:

if a = 0:

! если не стоит запрет
     !выполняем какой-то код
    ! например увеличиваем время (значение переменной отсчитывающей секунды)
    sec=sec+2
    ! если хотим, возвращаем запрет на дальнейшее выполнение кода в counter
    a = a + 1
end

И опять таки, если воспользоваться поиском по форуму, можно найти тему Действие по таймеру

Aleks Versus
воздвигатель башни
useravatar
Онлайн
1481 Сообщений
Информация о пользователе в сообщениях
Администратор отключил публичную отправку сообщений

Re: Таймер. Несколько видов таймера в играх.

Перед выкладыванием тестировал код со всех сторон и пришел к выводу, что (возможно, не возьмусь утверждать) $counter работает по принциру gosub, но с отсрочкой. Повторного исполнения кода не замечал (опять же не утверждаю). Пример с if действительно коряв. Только сейчас увидел. Поправлю.
Что касаемо поиска: он не столь информативен был на данную тематику, чем пример nex'a с игрой, где сообразил сразу что и куда. К тому же добавил три вида реализации таймера. Это будет полезно многим.
Инфу отредактирую. Спасибо за критику)))

ejikplains
useravatar
Offline
50 Сообщений
Информация о пользователе в сообщениях
Администратор отключил публичную отправку сообщений

Re: Таймер. Несколько видов таймера в играх.

ejikplains,
Для проверки достаточно будет в счётчике написать:

Код:

counter_time+=1

*clr
'Время идёт: <<counter_time>>'

Неожиданно, но код продолжает работать, а не выполнится одноразово.

Oliver
Magni nominis umbra
useravatar
Offline
562 Сообщений
Информация о пользователе в сообщениях
Администратор отключил публичную отправку сообщений

Re: Таймер. Несколько видов таймера в играх.

Oliver,
В пн вернусь и отредактирую. Я понял что ты имеешь в виду. Одно до сих пор не понятно: при повторном обращении в каунтеру без указания времени, settimer дефолтный или остается тем, что указан однажды на протяжении всей игры? И убивает ли kilall время или останавливает его?

ejikplains
useravatar
Offline
50 Сообщений
Информация о пользователе в сообщениях
Администратор отключил публичную отправку сообщений

Re: Таймер. Несколько видов таймера в играх.

ejikplains,
внимательнее читай справку.

settimer устанавливает периодичность обращения к counter.

ставишь 500 — раз в пол секунды выполняется код на counter
ставишь 2000 — раз в две секунды. Не один раз через две секунды, а КАЖДЫЕ две секунды.

Время убить нельзя. Поскольку settimer это оператор, а не переменная, значение, которое ты ему передаёшь, не убить.

Легко проверить. Самая первая локация в игре:

Код:

$counter = 'counter'

settimer 2000

локация counter

Код:

sec+=2

*clr
*pl sec
if sec=10:
killall
sec=12
$counter='counter'
end

Если запустишь и проверишь, увидишь, что числа по прежнему обновляются с периодичностью в две секунды.

Aleks Versus
воздвигатель башни
useravatar
Онлайн
1481 Сообщений
Информация о пользователе в сообщениях
Администратор отключил публичную отправку сообщений

Информация

Статистика форума:
 
Всего тем:
970
Всего опросов:
14
Всего сообщений:
16790553
Всего сообщений сегодня:
1
Пользователи форума:
 
Всего пользователей:
2356
Последним зарегистрировался:
Red Dragon