Расширенное использование таймеров (HPL2): различия между версиями
Slux (обсуждение | вклад) (Новая страница: «Таймеры настроены на ожидание в течение выбранного периода времени перед выполнением о…») |
Slux (обсуждение | вклад) м |
||
Строка 72: | Строка 72: | ||
Давайте разберем этот скрипт. | Давайте разберем этот скрипт. | ||
− | В '''void OnStart ()''' игрок не может двигаться или смотреть туда, куда ему заблагорассудится. Экран полностью тёмный и изображение проявляется через 3 секунды. Здесь добавляются 5 таймеров с локальными именами от '''Т1''' до '''Т5'''. | + | В '''void OnStart ()''' игрок не может двигаться или смотреть туда, куда ему заблагорассудится. Экран полностью тёмный и изображение проявляется через 3 секунды. Здесь добавляются 5 таймеров с локальными именами от '''Т1''' до '''Т5'''. Эти имена будут использоваться, чтобы отличать каждый таймер при использовании в функции '''Intro'''. |
В '''void Intro (string & in asTimer)''' строковая переменная '''x''' равна значению таймера. Таким образом, по прошествии 3 секунд вызывается функция таймера '''Intro''', в которой '''asTimer''' будет '''T1'''. Это позволяет оператору '''if''' видеть, какой таймер вызвал функцию, поэтому, если имя локального таймера '''T1''', он будет воспроизводить звук и исчезать с экрана, достигая полностью черного цвета за 3 секунды. Остальные сделаны таким же образом. | В '''void Intro (string & in asTimer)''' строковая переменная '''x''' равна значению таймера. Таким образом, по прошествии 3 секунд вызывается функция таймера '''Intro''', в которой '''asTimer''' будет '''T1'''. Это позволяет оператору '''if''' видеть, какой таймер вызвал функцию, поэтому, если имя локального таймера '''T1''', он будет воспроизводить звук и исчезать с экрана, достигая полностью черного цвета за 3 секунды. Остальные сделаны таким же образом. | ||
Расширенный таймер позволяет организовать таймеры в одну функцию вместо множества функций. | Расширенный таймер позволяет организовать таймеры в одну функцию вместо множества функций. |
Версия 17:28, 13 декабря 2018
Таймеры настроены на ожидание в течение выбранного периода времени перед выполнением определенных команд. В предисловиях к пользовательским историям я видел слишком быстрые заставки. Например, игрок лежит в своей постели и встает. Естественно, это должно занять немного больше времени, если это специально не сделано. Например, если игрок просыпается от разбитого стекла или странных звуков.
Вот как может выглядеть простой таймер:
void OnStart()
{
SetPlayerCrouching(true);
SetPlayerActive(false);
FadeOut(0);
FadeIn(3);
AddTimer("", 3, "Intro");
}
void Intro(string &in asTimer)
{
SetPlayerCrouching(false);
SetPlayerActive(true);
PlaySoundAtEntity("", "react_sigh.snt", "Player", 0, false);
}
Этот скрипт не имеет никакого «аромата». Предполагается, что введение заставит игрока почувствовать интерес или беспокойство по поводу того, что будет впереди. Я не пытаюсь сказать, что люди, которые пишут свои собственные истории, не имеют опыта, я говорю, что они должны попытаться рискнуть чем-то большим и лучшим. Это все приводит к расширенному использованию таймеров.
Вот как может выглядеть расширенный таймер:
void OnStart()
{
PlaySoundAtEntity("", "break_glass_bottle.snt", "Player", 0, false);
SetPlayerActive(false);
SetPlayerCrouching(true);
FadeOut(0);
FadeIn(3);
AddTimer("T1", 3, "Intro");
AddTimer("T2", 6, "Intro");
AddTimer("T3", 8, "Intro");
AddTimer("T4", 10, "Intro");
AddTimer("T5", 12, "Intro");
}
void Intro(string &in asTimer)
{
string x = asTimer;
if (x == "T1")
{
PlaySoundAtEntity("", "react_sigh.snt", "Player", 0, false);
FadeOut(3);
}
else if (x == "T2")
{
FadeIn(3);
PlaySoundAtEntity("", "react_breath.snt", "Player", 0, false);
StartPlayerLookAt("ScriptArea_1", 2, 2, "");
}
else if (x == "T3")
{
StopPlayerLookAt();
StartPlayerLookAt("ScriptArea_2", 2, 2, "");
}
else if (x == "T4")
{
PlaySoundAtEntity("", "react_breath_slow.snt", "Player", 0, false);
StopPlayerLookAt();
}
else if (x == "T5")
{
SetPlayerCrouching(false);
SetPlayerActive(true);
}
}
Давайте разберем этот скрипт.
В void OnStart () игрок не может двигаться или смотреть туда, куда ему заблагорассудится. Экран полностью тёмный и изображение проявляется через 3 секунды. Здесь добавляются 5 таймеров с локальными именами от Т1 до Т5. Эти имена будут использоваться, чтобы отличать каждый таймер при использовании в функции Intro.
В void Intro (string & in asTimer) строковая переменная x равна значению таймера. Таким образом, по прошествии 3 секунд вызывается функция таймера Intro, в которой asTimer будет T1. Это позволяет оператору if видеть, какой таймер вызвал функцию, поэтому, если имя локального таймера T1, он будет воспроизводить звук и исчезать с экрана, достигая полностью черного цвета за 3 секунды. Остальные сделаны таким же образом.
Расширенный таймер позволяет организовать таймеры в одну функцию вместо множества функций.