Здесь показаны различия между двумя версиями данной страницы.
Both sides previous revision Предыдущая версия Следущая версия | Предыдущая версия | ||
help:service_locations [2023/01/02 16:39] aleks_versus переписано |
help:service_locations [2024/11/09 03:20] (текущий) byte [Служебные локации] |
||
---|---|---|---|
Строка 1: | Строка 1: | ||
- | |||
[[help:jump|Назад: Переходы внутри локации]] | [[help:jump|Назад: Переходы внутри локации]] | ||
====== Служебные локации ====== | ====== Служебные локации ====== | ||
- | + | В **QSP** существует возможность привязать вызов некоторых локаций к определённым событиям. Например, к выделению предмета в окне предметов, или к переходу на новую локацию с помощью операторов ''%%GOTO%%''/''%%XGOTO%%''. | |
- | В **QSP** существует возможность привязать вызов некоторых локаций к определённым событиям. Например, к выделению предмета в окне предметов, или к переходу на новую локацию с помощью операторов ''**GOTO**''/''**XGOTO**''. | + | |
Чтобы привязать вызов локации к определённому событию, нужно прописать название этой локации в ту или иную системную переменную, предназначенную для связки события с локацией. | Чтобы привязать вызов локации к определённому событию, нужно прописать название этой локации в ту или иную системную переменную, предназначенную для связки события с локацией. | ||
Строка 18: | Строка 16: | ||
</sxh> | </sxh> | ||
- | Когда событие происходит, указанная локация вызывается точно так же, как если бы мы вызывали её с помощью оператора ''**[[help:organizing|GOSUB]]**''. | + | **Примечание:** При использовании операторов "''%%KILLALL%%'', ''%%KILLVAR%%''" очищаются также все системные переменные. В том числе и переменные, через которые назначаются локации-обработчики. |
+ | |||
+ | Когда событие происходит, указанная локация вызывается точно так же, как если бы мы вызывали её с помощью оператора ''**[[help:organizing|GOSUB]]**'', с тем исключением, что на всех служебных локациях восстанавливаются глобальные переменные. Пример: | ||
+ | |||
+ | <sxh qsp> | ||
+ | # start | ||
+ | $ongsave = 'ogs' | ||
+ | i = 99 | ||
+ | |||
+ | act 'Save Game': | ||
+ | local i = 17 | ||
+ | ! на экран будет выведено значение 99 | ||
+ | savegame '1.sav' | ||
+ | end | ||
+ | |||
+ | act 'Print i': | ||
+ | local i = 137 | ||
+ | ! на экран будет выведено 137 | ||
+ | gosub 'ogs' | ||
+ | end | ||
+ | -- | ||
+ | |||
+ | # ogs | ||
+ | *pl i | ||
+ | -- | ||
+ | </sxh> | ||
- | **Примечание:** При использовании операторов "''KILLALL'', ''KILLVAR''" очищаются также все системные переменные. В том числе и переменные, через которые назначаются локации-обработчики. | + | В этом примере при сохранении игры на экран будет выведено число 99 из глобальной переменной ''%%i%%''. Если же локация ''%%ogs%%'' вызывается не как служебная, на неё транслируются значения локальной переменной ''%%i%%'', объявленной в действии. |
===== События в QSP ===== | ===== События в QSP ===== | ||
Строка 28: | Строка 51: | ||
==== Загрузка состояния игры ==== | ==== Загрузка состояния игры ==== | ||
- | ''**$ONGLOAD**'' — содержит название локации-обработчика события "загрузка состояния игры" (далее "обработчик загрузки состояния"). Иными словами, в эту переменную записывается название локации, код которой будет выполняться всякий раз после того, как был загружен файл состояния игры ("файл сохранения") с помощью команды ''**OPENGAME**''. Название локации может быть любым. | + | ''%%$ONGLOAD%%'' — содержит название локации-обработчика события "загрузка состояния игры" (далее "обработчик загрузки состояния"). Иными словами, в эту переменную записывается название локации, код которой будет выполняться всякий раз после того, как был загружен файл состояния игры ("файл сохранения") с помощью команды ''%%OPENGAME%%''. Название локации может быть любым. |
+ | |||
+ | Назначаем в качестве обработчика загрузки состояния локацию "''%%on_game_load%%''": | ||
- | Назначаем в качестве обработчика загрузки состояния локацию "''on_game_load''": | ||
<sxh qsp> | <sxh qsp> | ||
$ongload="on_game_load" | $ongload="on_game_load" | ||
</sxh> | </sxh> | ||
- | Теперь сразу после выполнения команды ''**OPENGAME**'' плеер будет автоматически вызывать локацию "''on_game_load''". | + | Теперь сразу после выполнения команды ''%%OPENGAME%%'' плеер будет автоматически вызывать локацию "''%%on_game_load%%''". |
+ | |||
+ | Чтобы отключить обработчик загрузки состояния, нужно задать переменной ''%%$ONGLOAD%%'' пустое значение: | ||
- | Чтобы отключить обработчик загрузки состояния, нужно задать переменной ''**$ONGLOAD**'' пустое значение: | ||
<sxh qsp> | <sxh qsp> | ||
$ongload="" | $ongload="" | ||
Строка 44: | Строка 69: | ||
==== Сохранение состояния игры ==== | ==== Сохранение состояния игры ==== | ||
- | ''**$ONGSAVE**'' - содержит название локации-обработчика события "сохранение состояния игры" (далее "обработчик сохранения состояния"). Иными словами, в эту переменную записывается название локации, код которой будет выполняться всякий раз после того, как было записано состояние игры в новый, или уже существующий, файл состояния игры ("файл сохранения") с помощью команды ''**SAVEGAME**''. Название локации может быть любым. | + | ''%%$ONGSAVE%%'' - содержит название локации-обработчика события "сохранение состояния игры" (далее "обработчик сохранения состояния"). Иными словами, в эту переменную записывается название локации, код которой будет выполняться всякий раз перед тем, как записать состояние игры в новый, или уже существующий, файл состояния игры ("файл сохранения") с помощью команды ''%%SAVEGAME%%''. Название локации может быть любым. |
- | Назначаем в качестве обработчика сохранения состояния локацию "''on_game_save''": | + | Назначаем в качестве обработчика сохранения состояния локацию "''%%on_game_save%%''": |
<sxh qsp> | <sxh qsp> | ||
Строка 52: | Строка 77: | ||
</sxh> | </sxh> | ||
- | Теперь сразу после выполнения команды ''**SAVEGAME**'' плеер будет автоматически вызывать локацию "''on_game_save''". | + | Теперь сразу после выполнения команды ''%%SAVEGAME%%'' плеер будет автоматически вызывать локацию "''%%on_game_save%%''". |
+ | |||
+ | Чтобы отключить обработчик сохранения состояния, нужно задать переменной ''%%$ONGSAVE%%'' пустое значение: | ||
- | Чтобы отключить обработчик сохранения состояния, нужно задать переменной ''**$ONGSAVE**'' пустое значение: | ||
<sxh qsp> | <sxh qsp> | ||
$ongsave="" | $ongsave="" | ||
Строка 61: | Строка 87: | ||
==== Добавление предмета в окно предметов ==== | ==== Добавление предмета в окно предметов ==== | ||
- | ''**$ONOBJADD**'' — содержит название локации-обработчика события "добавление предмета в окно предметов" (далее "обработчик добавления предмета"). Иными словами, в эту переменную записывается название локации, код которой выполняется всякий раз после добавления предмета в окно предметов с помощью команды ''**ADDOBJ**''. Название локации может быть любым. | + | ''%%$ONOBJADD%%'' — содержит название локации-обработчика события "добавление предмета в окно предметов" (далее "обработчик добавления предмета"). Иными словами, в эту переменную записывается название локации, код которой выполняется всякий раз после добавления предмета в окно предметов с помощью команды ''%%ADDOBJ%%''. Название локации может быть любым. |
- | При добавлении предмета этой локации-обработчику передаются два аргумента, значения которых можно получить из ''$ARGS[0]'' и ''$ARGS[1]'' соответственно: | + | При добавлении предмета этой локации-обработчику передаются два аргумента, значения которых можно получить из ''%%$ARGS[0]%%'' и ''%%$ARGS[1]%%'' соответственно: |
- | * ''$ARGS[0]'' - название добавленного предмета | + | * ''%%$ARGS[0]%%'' - название добавленного предмета |
- | * ''$ARGS[1]'' - путь к картинке добавленного предмета | + | * ''%%$ARGS[1]%%'' - путь к картинке добавленного предмета |
Данная локация полезна, к примеру, для ограничения вместительности рюкзака. | Данная локация полезна, к примеру, для ограничения вместительности рюкзака. | ||
- | Назначаем в качестве обработчика добавления предмета локацию "''on_object_add''": | + | Назначаем в качестве обработчика добавления предмета локацию "''%%on_object_add%%''": |
<sxh qsp> | <sxh qsp> | ||
$onobjadd="on_object_add" | $onobjadd="on_object_add" | ||
</sxh> | </sxh> | ||
- | Теперь сразу после выполнения команды ''**ADDOBJ**'' плеер будет автоматически вызывать локацию "''on_object_add''". | + | Теперь сразу после выполнения команды ''%%ADDOBJ%%'' плеер будет автоматически вызывать локацию "''%%on_object_add%%''". |
+ | |||
+ | Чтобы отключить обработчик добавления предмета, нужно задать переменной ''%%$ONOBJADD%%'' пустое значение: | ||
- | Чтобы отключить обработчик добавления предмета, нужно задать переменной ''**$ONOBJADD**'' пустое значение: | ||
<sxh qsp> | <sxh qsp> | ||
$onobjadd="" | $onobjadd="" | ||
Строка 84: | Строка 112: | ||
==== Удаление предмета из окна предметов ==== | ==== Удаление предмета из окна предметов ==== | ||
- | ''**$ONOBJDEL**'' — содержит название локации-обработчика события "удаление предмета" (далее "обработчик удаления предмета"). Иными словами, в эту переменную записывается название локации, код которой вполняется всякий раз при удалении предмета с помощью команды ''**DELOBJ**''. Если воспользоваться командой ''**KILLOBJ**'', то это будет аналогично серии команд ''**DELOBJ**'', соответственно и локация-обработчик будет вызвана столько раз, сколько предметов будет удалено с помощью ''**KILLOBJ**''. Название локации может быть любым. | + | ''%%$ONOBJDEL%%'' — содержит название локации-обработчика события "удаление предмета" (далее "обработчик удаления предмета"). Иными словами, в эту переменную записывается название локации, код которой выполняется всякий раз после удаления предмета с помощью команды ''%%DELOBJ%%''. Если воспользоваться командой ''%%KILLOBJ%%'', то это будет аналогично серии команд ''%%DELOBJ%%'', соответственно и локация-обработчик будет вызвана столько раз, сколько предметов будет удалено с помощью ''%%KILLOBJ%%''. Название локации может быть любым. |
- | При использовании команды ''**KILLALL**'' локация-обработчик удаления предмета не вызывается, поскольку системная переменная ''**$ONOBJDEL**'' также уничтожается. | + | При использовании команды ''%%KILLALL%%'' локация-обработчик удаления предмета не вызывается, поскольку системная переменная ''%%$ONOBJDEL%%'' уничтожается раньше удаления предметов. |
- | При удалении предмета обработчику удаления предмета передаётся аргумент, значение которого можно получить из ''$ARGS[0]'': | + | При удалении предмета обработчику удаления предмета передаётся аргумент, значение которого можно получить из ''%%$ARGS[0]%%'': |
- | * ''$ARGS[0]'' - название удалённого предмета | + | * ''%%$ARGS[0]%%'' - название удалённого предмета |
+ | |||
+ | Назначаем в качестве обработчика удаления предмета локацию "''%%on_object_del%%''": | ||
- | Назначаем в качестве обработчика удаления предмета локацию "''on_object_del''": | ||
<sxh qsp> | <sxh qsp> | ||
$onobjdel="on_object_del" | $onobjdel="on_object_del" | ||
</sxh> | </sxh> | ||
- | Теперь сразу после выполнения команды ''**DELOBJ**'' плеер будет автоматически вызывать локацию "''on_object_del''". А сразу после выполнения команды ''**KILLOBJ**'' локация "''on_object_del''" будет вызвана столько раз, сколько предметов удалено этой командой. | + | Теперь сразу после выполнения команды ''%%DELOBJ%%'' плеер будет автоматически вызывать локацию "''%%on_object_del%%''". А сразу после выполнения команды ''%%KILLOBJ%%'' локация "''%%on_object_del%%''" будет вызвана столько раз, сколько предметов удалено этой командой. |
Данная локация полезна, к примеру, для проверки возможности удаления предмета: | Данная локация полезна, к примеру, для проверки возможности удаления предмета: | ||
+ | |||
<sxh qsp> | <sxh qsp> | ||
! например есть предмет, который нам пригодится по сюжету | ! например есть предмет, который нам пригодится по сюжету | ||
if $args[0]="Важный артефакт": | if $args[0]="Важный артефакт": | ||
- | ! восстанавливаем предмет | + | ! восстанавливаем предмет |
- | addobj $args[0] | + | addobj $args[0] |
end | end | ||
</sxh> | </sxh> | ||
- | Чтобы отключить обработчик удаления предмета, нужно задать переменной ''**$ONOBJDEL**'' пустое значение: | + | |
+ | Чтобы отключить обработчик удаления предмета, нужно задать переменной ''%%$ONOBJDEL%%'' пустое значение: | ||
<sxh qsp> | <sxh qsp> | ||
$onobjdel="" | $onobjdel="" | ||
Строка 114: | Строка 146: | ||
==== Выделение предмета в окне предметов ==== | ==== Выделение предмета в окне предметов ==== | ||
- | ''**$ONOBJSEL**'' — содержит название локации-обработчика события "выделение предмета" (далее "обработчик выделения предмета"). Иными словами, в этой переменной указывается название локации, код на которой выполняется всякий раз при выделении предмета. Выделение предмета происходит непосредственно при "нажатии" на предмет (щелчок мышью по предмету). Название локации может быть любым. | + | ''%%$ONOBJSEL%%'' — содержит название локации-обработчика события "выделение предмета" (далее "обработчик выделения предмета"). Иными словами, в этой переменной указывается название локации, код на которой выполняется всякий раз при выделении предмета. Выделение предмета происходит непосредственно при "нажатии" на предмет (щелчок мышью по предмету). Название локации может быть любым. |
+ | |||
+ | Назначаем в качестве обработчика выделения предмета локацию "''%%on_object_select%%''": | ||
- | Назначаем в качестве обработчика выделения предмета локацию "''on_object_select''": | ||
<sxh qsp> | <sxh qsp> | ||
$onobjsel="on_object_select" | $onobjsel="on_object_select" | ||
</sxh> | </sxh> | ||
- | Теперь всякий раз после щелчка мышью на предмете будет выполняться код локации "''on_object_select''". | + | Теперь всякий раз после щелчка мышью на предмете будет выполняться код локации "''%%on_object_select%%''". |
+ | |||
+ | Данная локация полезна, к примеру, для вывода информации о предмете, или для вызова меню предмета. Получить название выбранного предмета можно через функцию ''%%$SELOBJ%%''. | ||
- | Данная локация полезна, к примеру, для вывода информации о предмете, или для вызова меню предмета. Получить название выбранного предмета можно через функцию ''**$SELOBJ**''. | ||
<sxh qsp> | <sxh qsp> | ||
if $selobj = 'чайник': | if $selobj = 'чайник': | ||
- | p 'Cамый обычный чугунный чайник.' | + | p 'Cамый обычный чугунный чайник.' |
end | end | ||
</sxh> | </sxh> | ||
- | При выборе играющим какого-либо предмета, он остаётся выделенным. Повторно выделить уже выделенный предмет нельзя. Снять выделение можно командой ''**UNSELECT**''. | + | |
+ | При выборе играющим какого-либо предмета, он остаётся выделенным. Повторно выделить уже выделенный предмет нельзя. Снять выделение можно командой ''%%UNSELECT%%''. | ||
<sxh qsp> | <sxh qsp> | ||
if $selobj = 'нож': | if $selobj = 'нож': | ||
- | *p 'Этим ножом даже хлеба не нарежешь.' | + | *p 'Этим ножом даже хлеба не нарежешь.' |
end | end | ||
unselect &! или UNSEL | unselect &! или UNSEL | ||
Строка 140: | Строка 175: | ||
==== Переход на новую локацию ==== | ==== Переход на новую локацию ==== | ||
- | ''**$ONNEWLOC**'' — содержит название локации-обработчика перехода на новую локацию (далее "обработчик перехода"). Иными словами, в эту переменную записывается название локации, код которой выполняется каждый раз после выполнения кода локации, на которую был осуществлён переход с помощью операторов ''**GOTO**'' или ''**XGOTO**''. Управление игрой передаётся игроку уже после выполнения кода на этой локации-обработчике. Название локации может быть любым. | + | ''%%$ONNEWLOC%%'' — содержит название локации-обработчика перехода на новую локацию (далее "обработчик перехода"). Иными словами, в эту переменную записывается название локации, код которой выполняется каждый раз после выполнения кода локации, на которую был осуществлён переход с помощью операторов ''%%GOTO%%'' или ''%%XGOTO%%''. Управление игрой передаётся игроку уже после выполнения кода на этой локации-обработчике. Название локации может быть любым. |
+ | |||
+ | Назначаем в качестве обработчика перехода локацию "''%%on_goto_newloc%%''": | ||
- | Назначаем в качестве обработчика перехода локацию "''on_goto_newloc''": | ||
<sxh qsp> | <sxh qsp> | ||
$onnewloc="on_goto_newloc" | $onnewloc="on_goto_newloc" | ||
</sxh> | </sxh> | ||
- | Теперь всякий раз после выполнения кода локации, на которую был осуществлён переход с помощью операторов ''**GOTO**'' или ''**XGOTO**'', будет автоматически вызываться локация "''on_goto_newloc''". | + | Теперь всякий раз после выполнения кода локации, на которую был осуществлён переход с помощью операторов ''%%GOTO%%'' или ''%%XGOTO%%'', будет автоматически вызываться локация "''%%on_goto_newloc%%''". |
- | Получить название локации, на которую был осуществлён переход, можно с помощью функции ''**$CURLOC**''. | + | Получить название локации, на которую был осуществлён переход, можно с помощью функции ''%%$CURLOC%%''. |
- | <sxh qsp> | + | |
+ | <sxh qsp> | ||
if $curloc = 'дом': кошка = 1 | if $curloc = 'дом': кошка = 1 | ||
</sxh> | </sxh> | ||
- | Чтобы отключить обработчик перехода, нужно задать переменной ''**$ONNEWLOC**'' пустое значение: | + | Чтобы отключить обработчик перехода, нужно задать переменной ''%%$ONNEWLOC%%'' пустое значение: |
<sxh qsp> | <sxh qsp> | ||
$onnewloc="" | $onnewloc="" | ||
Строка 161: | Строка 199: | ||
==== Выделение действия ==== | ==== Выделение действия ==== | ||
- | ''**$ONACTSEL**'' — содержит название локации-обработчика события "выделение действия" (обработчик выделения действий). Иными словами, в этой переменной указывается название локации, код на которой срабатывает, когда одно из выведенных на экран действий выделяется. Название локации может быть любым. | + | ''%%$ONACTSEL%%'' — содержит название локации-обработчика события "выделение действия" (обработчик выделения действий). Иными словами, в этой переменной указывается название локации, код на которой срабатывает, когда одно из выведенных на экран действий выделяется. Название локации может быть любым. |
Следует помнить, что выделение действия происходит при наведении на него указателя мыши, а не при непосредственном нажатии. | Следует помнить, что выделение действия происходит при наведении на него указателя мыши, а не при непосредственном нажатии. | ||
Строка 169: | Строка 207: | ||
Важно! При управлении действиями с цифровой клавиатуры, выделение действий может "прыгать", из-за чего работа обработчика выделения действий может быть некорректна. | Важно! При управлении действиями с цифровой клавиатуры, выделение действий может "прыгать", из-за чего работа обработчика выделения действий может быть некорректна. | ||
- | Назначаем в качестве обработчика выделения действий локацию "''on_mouse''": | + | Назначаем в качестве обработчика выделения действий локацию "''%%on_mouse%%''": |
<sxh qsp> | <sxh qsp> | ||
$onactsel="on_mouse" | $onactsel="on_mouse" | ||
</sxh> | </sxh> | ||
- | Теперь всякий раз при наведении указателя мыши на любое из действий в окне действий, будет вызываться локация "''on_mouse''". | + | Теперь всякий раз при наведении указателя мыши на любое из действий в окне действий, будет вызываться локация "''%%on_mouse%%''". |
+ | |||
+ | Данная локация полезна, к примеру, для вывода изображений или проигрывания звуков при выборе действий. Получить название выбранного действия можно через функцию ''%%$SELACT%%''. | ||
- | Данная локация полезна, к примеру, для вывода изображений или проигрывания звуков при выборе действий. Получить название выбранного действия можно через функцию ''**$SELACT**''. | ||
<sxh qsp> | <sxh qsp> | ||
if instr(1,$selact,'пойти'): play 'sounds\walk.mp3' | if instr(1,$selact,'пойти'): play 'sounds\walk.mp3' | ||
</sxh> | </sxh> | ||
- | Чтобы отключить обработчик выделения действий, нужно задать переменной ''**$ONACTSEL**'' пустое значение: | + | |
+ | Чтобы отключить обработчик выделения действий, нужно задать переменной ''%%$ONACTSEL%%'' пустое значение: | ||
<sxh qsp> | <sxh qsp> | ||
$onactsel="" | $onactsel="" | ||
Строка 187: | Строка 229: | ||
==== Ввод в строке ввода ==== | ==== Ввод в строке ввода ==== | ||
- | ''**$USERCOM**'' — содержит название локации-обработчика строки ввода (поля ввода) (далее "обработчик ввода"). Код данной локации-обработчика выполняется, если курсор установлен в строку ввода в момент нажатия клавиши "Enter". Название локации может быть любым. | + | ''%%$USERCOM%%'' — содержит название локации-обработчика строки ввода (поля ввода) (далее "обработчик ввода"). Код данной локации-обработчика выполняется, если курсор установлен в строку ввода в момент нажатия клавиши "Enter". Название локации может быть любым. |
+ | |||
+ | Назначаем в качестве локации-обработчика строки ввода локацию "''%%user_command_line%%''": | ||
- | Назначаем в качестве локации-обработчика строки ввода локацию "''user_command_line''": | ||
<sxh qsp> | <sxh qsp> | ||
$usercom="user_command_line" | $usercom="user_command_line" | ||
</sxh> | </sxh> | ||
- | Теперь, если игрок установит курсор в строку ввода и начнёт нажимать клавишу "Enter", всякий раз при нажатии клавиши "Enter" будет вызываться локация "''user_comand_line''". | + | Теперь, если игрок установит курсор в строку ввода и начнёт нажимать клавишу "Enter", всякий раз при нажатии клавиши "Enter" будет вызываться локация "''%%user_comand_line%%''". |
- | Полезна при организации парсера (управление игрой с помощью строки ввода), или для организации отладчика. Получить текст, введённый игроком в поле ввода, можно с помощью функции ''**$USER_TEXT**''. | + | Полезна при организации парсера (управление игрой с помощью строки ввода), или для организации отладчика. Получить текст, введённый игроком в поле ввода, можно с помощью функции ''%%$USER_TEXT%%''. |
Пример кода для локации-обработчика: | Пример кода для локации-обработчика: | ||
+ | |||
<sxh qsp> | <sxh qsp> | ||
! если введённый текст соответствует названию существующей локации | ! если введённый текст соответствует названию существующей локации | ||
if (loc $user_text)=-1: | if (loc $user_text)=-1: | ||
- | ! осуществляем переход на эту локацию | + | ! осуществляем переход на эту локацию |
- | goto $user_text | + | goto $user_text |
elseif instr($user_text,'>')=1: | elseif instr($user_text,'>')=1: | ||
- | ! если первый символ в строке ввода это ">" , | + | ! если первый символ в строке ввода это ">" , |
- | ! выполняем введённый в строку текст, как код | + | ! выполняем введённый в строку текст, как код |
- | dynamic $mid($user_text,2) | + | dynamic $mid($user_text,2) |
end | end | ||
</sxh> | </sxh> | ||
- | Чтобы отключить обработчик ввода, нужно задать переменной ''**$USERCOM**'' пустое значение: | + | |
+ | Чтобы отключить обработчик ввода, нужно задать переменной ''%%$USERCOM%%'' пустое значение: | ||
<sxh qsp> | <sxh qsp> | ||
$usercom="" | $usercom="" | ||
Строка 221: | Строка 267: | ||
Локация-счётчик не является обработчиком какого-то события, как такового. Она вызывается через примерно равные промежутки времени, поэтому здесь мы выделяем её в отдельную группу. Тем не менее, всё, что справедливо для локаций-обработчиков событий, справедливо и для локации-счётчика. | Локация-счётчик не является обработчиком какого-то события, как такового. Она вызывается через примерно равные промежутки времени, поэтому здесь мы выделяем её в отдельную группу. Тем не менее, всё, что справедливо для локаций-обработчиков событий, справедливо и для локации-счётчика. | ||
- | ''**$COUNTER**'' — содержит название локации-счётчика. Локация-счётчик может использоваться для реалтаймовых событий (то есть событий, происходящих в действительном времени); например, плавное изменение цвета фона, постепенный вывод текста на экран, плейлист для постоянного проигрывания музыки и другие. Название локации может быть любым. | + | ''%%$COUNTER%%'' — содержит название локации-счётчика. Локация-счётчик может использоваться для реалтаймовых событий (то есть событий, происходящих в действительном времени); например, плавное изменение цвета фона, постепенный вывод текста на экран, плейлист для постоянного проигрывания музыки и другие. Название локации может быть любым. |
- | Локация-счетчик вызывается через одинаковые промежутки времени, по умолчанию каждые 500 мс, т.е. 2 раза в секунду. Автоматическое обновление интерфейса срабатывает с той же частотой. Промежутки задаются оператором ''**SETTIMER**'' в миллисекундах. | + | Как правило, чтобы не путаться, локацию называют так же, как и служебную переменную — "Counter": |
- | **Внимание!!!** Период, выставляемый через ''**SETTIMER**'' — это очень условная величина. Он показывает только примерное время, когда локация-счётчик будет добавлена на выполнение в очередь. Непосредственно выполниться локация-счётчик может чуть позже, а то и сильно позже. Будьте бдительны. | ||
- | |||
- | Если ваша локация-счётчик называется "''on_time''", на самой первой локации в игре нужно написать: | ||
<sxh qsp> | <sxh qsp> | ||
- | $counter='on_time' | + | $counter='Counter' |
</sxh> | </sxh> | ||
- | Теперь, если вы не использовали оператор ''**SETTIMER**'', примерно каждые 500 миллисекунд будет вызываться локация "''on_time''". | + | Чтобы отключить выполнение локации-счётчика, нужно задать пустое значение переменной ''%%$COUNTER%%'': |
- | Как правило, чтобы не путаться, локацию называют так же, как и служебную переменную — "Counter": | ||
- | <sxh qsp> | ||
- | $counter='Counter' | ||
- | </sxh> | ||
- | Чтобы отключить выполнение локации-счётчика, нужно задать пустое значение переменной ''**$COUNTER**'': | ||
<sxh qsp> | <sxh qsp> | ||
$counter="" | $counter="" | ||
</sxh> | </sxh> | ||
+ | |||
+ | ==== SETTIMER ==== | ||
+ | |||
+ | Локация-счетчик вызывается через одинаковые промежутки времени, по умолчанию каждые 500 мс, т.е. 2 раза в секунду. Автоматическое обновление интерфейса срабатывает с той же частотой. Промежутки задаются оператором ''%%SETTIMER%%'' в миллисекундах. | ||
+ | |||
+ | **Внимание!!!** Период, выставляемый через ''%%SETTIMER%%'' — это очень условная величина. Он показывает только примерное время, когда локация-счётчик будет добавлена на выполнение в очередь. Непосредственно выполниться локация-счётчик может чуть позже, а то и сильно позже. Будьте бдительны. | ||
+ | |||
+ | Если ваша локация-счётчик называется "''%%on_time%%''", на самой первой локации в игре нужно написать: | ||
+ | |||
+ | <sxh qsp> | ||
+ | $counter='on_time' | ||
+ | </sxh> | ||
+ | |||
+ | Теперь, если вы не использовали оператор ''%%SETTIMER%%'', примерно каждые 500 миллисекунд будет вызываться локация "''%%on_time%%''". | ||
Примеры выставления таймера: | Примеры выставления таймера: | ||
+ | |||
<sxh qsp> | <sxh qsp> | ||
SETTIMER 1000/частота_в_герцах | SETTIMER 1000/частота_в_герцах | ||
</sxh> | </sxh> | ||
+ | |||
<sxh qsp> | <sxh qsp> | ||
SETTIMER 1000*период_в_секундах | SETTIMER 1000*период_в_секундах | ||
Строка 259: | Строка 313: | ||
Эта задача решается двумя способами. | Эта задача решается двумя способами. | ||
- | * Назначаем в качестве локации-обработчика какого-либо события одну локацию, а уже из неё с помощью ''**GOSUB**'' вызываем необходимые локации, на которых мы разместили фрагменты кода:<sxh qsp> | + | * Назначаем в качестве локации-обработчика какого-либо события одну локацию, а уже из неё с помощью ''%%GOSUB%%'' вызываем необходимые локации, на которых мы разместили фрагменты кода: <sxh qsp> |
- | ! самая первая локация в игре | + | ! самая первая локация в игре $counter='counter' |
- | $counter='counter' | + | |
</sxh><sxh qsp> | </sxh><sxh qsp> | ||
- | ! локация counter | + | ! локация counter |
- | gosub 'playlist' | + | gosub 'playlist' |
- | gosub 'rabbit_hole','animation' | + | gosub 'rabbit_hole','animation' |
</sxh> | </sxh> | ||
- | * Используем системную переменную, в которую обычно прописываем название локации-обработчика, как массив, и прописываем локации, на которых мы разместили фрагменты кода, в ячейки этого массива:<sxh qsp> | + | |
- | $counter[0]='playlist' | + | * Используем системную переменную, в которую обычно прописываем название локации-обработчика, как массив, и прописываем локации, на которых мы разместили фрагменты кода, в ячейки этого массива: <sxh qsp> |
- | $counter[1]='rabbit_hole' | + | $counter[0]='playlist' $counter[1]='rabbit_hole' |
- | </sxh>В данном случае плеер будет последовательно одну за другой вызывать локации, прописанные в этом массиве, пока массив не кончится, или пока плеер не встретит пустую ячейку (пустую строку в ячейке). | + | </sxh> В данном случае плеер будет последовательно одну за другой вызывать локации, прописанные в этом массиве, пока массив не кончится, или пока плеер не встретит пустую ячейку (пустую строку в ячейке). |
Обратите внимание на преимущества и недостатки каждого способа. | Обратите внимание на преимущества и недостатки каждого способа. | ||
Строка 279: | Строка 332: | ||
[[help:dynamical|Вперёд: Динамический код]] | [[help:dynamical|Вперёд: Динамический код]] | ||
- | |||