Здесь показаны различия между двумя версиями данной страницы.
Both sides previous revision Предыдущая версия Следущая версия | Предыдущая версия | ||
help:realtime [2023/01/03 12:43] aleks_versus переписано |
help:realtime [2024/10/14 12:52] (текущий) aleks_versus обновление 5.9.0 |
||
---|---|---|---|
Строка 1: | Строка 1: | ||
- | |||
[[help:savegame|Назад: Файлы сохранений]] | [[help:savegame|Назад: Файлы сохранений]] | ||
====== Реальное время ====== | ====== Реальное время ====== | ||
- | |||
Прежде всего следует понимать, что весь код в **QSP** выполняется линейно, последовательно, команда за командой. Так же имейте ввиду, что локации (и другие блоки кода) ставятся на выполнение в очередь, и никогда код в них не выполняется одновременно. Понимание двух этих простых вещей поможет вам лучше проектировать код в локации-счётчике и управлять событиями в реальном времени. | Прежде всего следует понимать, что весь код в **QSP** выполняется линейно, последовательно, команда за командой. Так же имейте ввиду, что локации (и другие блоки кода) ставятся на выполнение в очередь, и никогда код в них не выполняется одновременно. Понимание двух этих простых вещей поможет вам лучше проектировать код в локации-счётчике и управлять событиями в реальном времени. | ||
Строка 11: | Строка 9: | ||
===== Оператор задержки WAIT ===== | ===== Оператор задержки WAIT ===== | ||
- | ''**WAIT**'' — приостановка выполнения кода программы на указанное количество миллисекунд. Общая запись: | + | ''%%WAIT%%'' — приостановка выполнения кода программы на указанное количество миллисекунд. Общая запись: |
<sxh qsp> | <sxh qsp> | ||
WAIT [#миллисекунды] | WAIT [#миллисекунды] | ||
</sxh> | </sxh> | ||
- | , где ''[#миллисекунды]'' — время в миллисекундах, на какое следует остановить выполнение кода программы. 1 секунда равна 1000 миллисекунд. | + | |
+ | , где ''%%[#миллисекунды]%%'' — время в миллисекундах, на какое следует остановить выполнение кода программы. 1 секунда равна 1000 миллисекунд. | ||
Пример: | Пример: | ||
+ | |||
<sxh qsp> | <sxh qsp> | ||
! остановка выполнения программы на 5 секунд | ! остановка выполнения программы на 5 секунд | ||
Строка 28: | Строка 29: | ||
Очень рекомендуем вообще не использовать данный оператор, или использовать только во время тестов, для задержек в различных циклических действиях, или визуализации процессов. | Очень рекомендуем вообще не использовать данный оператор, или использовать только во время тестов, для задержек в различных циклических действиях, или визуализации процессов. | ||
+ | |||
+ | В **qSpider** у игрока есть возможность кликом мыши прервать задержку и продолжить игру. | ||
===== Функция MSECSCOUNT ===== | ===== Функция MSECSCOUNT ===== | ||
- | ''**MSECSCOUNT**'' — функция в любом месте игры возвращает количество миллисекунд, прошедших с момента начала игры. Данная функция при использовании на локации-счётчике позволяет организовывать различные события, происходящие в реальном времени. Так же, с помощью этой функции можно делать замеры быстродействия различных участков кода в вашей игре: | + | ''%%MSECSCOUNT%%'' — в любом месте игры возвращает количество миллисекунд, прошедших с момента начала игры. Данная функция при использовании на локации-счётчике позволяет организовывать различные события, происходящие в реальном времени. Также с помощью этой функции можно делать замеры быстродействия различных участков кода в вашей игре: |
- | <sxh qsp> | + | |
+ | <sxh qsp> | ||
i=0 | i=0 | ||
- | old_time=msecscount | + | old_time = msecscount |
:for | :for | ||
if i<100000: | if i<100000: | ||
- | d[i]=i | + | d[i]=i |
- | i+=1 | + | i+=1 |
- | jump 'for' | + | jump 'for' |
end | end | ||
- | new_time=msecscount | + | new_time = msecscount |
pl "Скорость работы старого цикла: "+$str(new_time-old_time) | pl "Скорость работы старого цикла: "+$str(new_time-old_time) | ||
- | old_time=msecscount | + | old_time = msecscount |
loop i=0 while i<100000 step i+=1: | loop i=0 while i<100000 step i+=1: | ||
- | b[i]=i | + | b[i]=i |
end | end | ||
- | new_time=msecscount | + | new_time = msecscount |
- | pl "Скорость работы нового цикла: "+$str(new_time-old_time) | + | pl "Скорость работы нового цикла: " + $str(new_time-old_time) |
</sxh> | </sxh> | ||
+ | |||
Максимальное число, которое может вернуть данная функция, это **2147483647**. Не трудно посчитать, что этого хватит более, чем на **550** часов игры. | Максимальное число, которое может вернуть данная функция, это **2147483647**. Не трудно посчитать, что этого хватит более, чем на **550** часов игры. | ||
Строка 57: | Строка 62: | ||
В **QSP** есть возможность выполнять код через определённые промежутки времени — для этого используется локация-счётчик. | В **QSP** есть возможность выполнять код через определённые промежутки времени — для этого используется локация-счётчик. | ||
- | Чтобы локация-счётчик заработала, необходимо внести её название в служебную переменную ''**$COUNTER**''. Например, если ваша локация-счётчик называется **''Счётчик''**, на самой первой локации в игре нужно написать: | + | Чтобы локация-счётчик заработала, необходимо внести её название в служебную переменную ''%%$COUNTER%%''. Например, если ваша локация-счётчик называется **''%%Счётчик%%''**, на самой первой локации в игре нужно написать: |
<sxh qsp> | <sxh qsp> | ||
$counter='Счётчик' | $counter='Счётчик' | ||
</sxh> | </sxh> | ||
- | Как правило, чтобы не путаться, локацию называют так же, как и служебную переменную — **''Counter''**: | + | |
+ | Как правило, чтобы не путаться, локацию называют так же, как и служебную переменную — **''%%Counter%%''**: | ||
<sxh qsp> | <sxh qsp> | ||
$counter='Counter' | $counter='Counter' | ||
Строка 68: | Строка 76: | ||
Затем на созданной локации-счётчике пишут код, который должен выполняться через определённые промежутки времени. | Затем на созданной локации-счётчике пишут код, который должен выполняться через определённые промежутки времени. | ||
- | По-умолчанию, код на локации-счётчике выполняется каждые пол секунды (500 миллисекунд). Но это значение можно изменить, использовав оператор ''**SETTIMER**'': | + | По умолчанию, код на локации-счётчике выполняется каждые пол секунды (500 миллисекунд). Но это значение можно изменить, использовав оператор ''%%SETTIMER%%'': |
<sxh qsp> | <sxh qsp> | ||
! устанавливает период выполнения кода | ! устанавливает период выполнения кода | ||
Строка 74: | Строка 83: | ||
SETTIMER 100 | SETTIMER 100 | ||
</sxh> | </sxh> | ||
- | Комбинируя возможности операторов, функций и локации-счётчика, можно задавать множество событий, выполняемых в реальном времени. | + | |
- | Для примера приведён код локации-счётчика, который будет выводить строки текста одну за одной каждые полторы секунды: | + | Комбинируя возможности операторов, функций и локации-счётчика, можно задавать множество событий, выполняемых в реальном времени. Для примера приведён код локации-счётчика, который будет выводить строки текста одну за одной каждые полторы секунды: |
<sxh qsp> | <sxh qsp> | ||
settimer 20 | settimer 20 | ||
if стихотворение=0: | if стихотворение=0: | ||
- | if время_первая_строка=0: | + | if время_первая_строка=0: |
- | время_первая_строка=msecscount+1500 | + | время_первая_строка=msecscount+1500 |
- | end | + | end |
- | if msecscount>=время_первая_строка: | + | if msecscount>=время_первая_строка: |
- | *pl 'Веленью совести, о Муза, будь послушна!' | + | *pl 'Веленью совести, о Муза, будь послушна!' |
- | стихотворение=1 | + | стихотворение=1 |
- | end | + | end |
end | end | ||
if стихотворение=1: | if стихотворение=1: | ||
- | if время_вторая_строка=0: | + | if время_вторая_строка=0: |
- | время_вторая_строка=msecscount+1500 | + | время_вторая_строка=msecscount+1500 |
- | end | + | end |
- | if msecscount>=время_вторая_строка: | + | if msecscount>=время_вторая_строка: |
- | *pl 'Обиды не страшась, не требуя венца,' | + | *pl 'Обиды не страшась, не требуя венца,' |
- | стихотворение=2 | + | стихотворение=2 |
- | end | + | end |
end | end | ||
if стихотворение=2: | if стихотворение=2: | ||
- | if время_третья_строка=0: | + | if время_третья_строка=0: |
- | время_третья_строка=msecscount+1500 | + | время_третья_строка=msecscount+1500 |
- | end | + | end |
- | if msecscount>=время_третья_строка: | + | if msecscount>=время_третья_строка: |
- | *pl 'Хвалу и клевету приемли равнодушно' | + | *pl 'Хвалу и клевету приемли равнодушно' |
- | стихотворение=3 | + | стихотворение=3 |
- | end | + | end |
end | end | ||
if стихотворение=3: | if стихотворение=3: | ||
- | if время_четвёртая_строка=0: | + | if время_четвёртая_строка=0: |
- | время_четвёртая_строка=msecscount+1500 | + | время_четвёртая_строка=msecscount+1500 |
- | end | + | end |
- | if msecscount>=время_четвёртая_строка: | + | if msecscount>=время_четвёртая_строка: |
- | *pl 'И не оспаривай глупца.' | + | *pl 'И не оспаривай глупца.' |
- | стихотворение=4 | + | стихотворение=4 |
- | end | + | end |
end | end | ||
</sxh> | </sxh> | ||
Строка 122: | Строка 132: | ||
===== Оператор SETTIMER ===== | ===== Оператор SETTIMER ===== | ||
- | ''**SETTIMER**'' — задаёт интервал обращения к локации-счётчику. Общая запись: | + | ''%%SETTIMER%%'' — задаёт интервал обращения к локации-счётчику. Общая запись: |
<sxh qsp> | <sxh qsp> | ||
SETTIMER [#выражение] | SETTIMER [#выражение] | ||
</sxh> | </sxh> | ||
- | , где ''[#выражение]'' — период обращения к локации-счётчику в миллисекундах. По умолчанию плеер обращается к локации-счётчику каждые 500 мс., т.е. 2 раза в секунду. | + | |
+ | , где ''%%[#выражение]%%'' — период обращения к локации-счётчику в миллисекундах. По умолчанию плеер обращается к локации-счётчику каждые 500 мс., т.е. 2 раза в секунду. | ||
Установка периода обращения к локации-счётчику влияет и на частоту автоматического обновления настроек интерфейса. | Установка периода обращения к локации-счётчику влияет и на частоту автоматического обновления настроек интерфейса. | ||
Примеры: | Примеры: | ||
+ | |||
<sxh qsp> | <sxh qsp> | ||
! локация-счётчик будет запускаться каждые 2 секунды: | ! локация-счётчик будет запускаться каждые 2 секунды: | ||
Строка 153: | Строка 165: | ||
settimer 1000*period | settimer 1000*period | ||
</sxh> | </sxh> | ||
+ | |||
Минимальное значение периода таким образом может быть 1 миллисекунда: | Минимальное значение периода таким образом может быть 1 миллисекунда: | ||
+ | |||
<sxh qsp> | <sxh qsp> | ||
settimer 1 | settimer 1 | ||
</sxh> | </sxh> | ||
+ | |||
Однако на практике минимальное значение ограничено мощностью вашего компьютера, и оно, как правило, выше 1 миллисекунды. Для проверки фактического времени обращения к локации-счётчику можно использовать на локации-счётчике простой код: | Однако на практике минимальное значение ограничено мощностью вашего компьютера, и оно, как правило, выше 1 миллисекунды. Для проверки фактического времени обращения к локации-счётчику можно использовать на локации-счётчике простой код: | ||
Строка 162: | Строка 177: | ||
! settimer 1 | ! settimer 1 | ||
if msecscount < 10000: | if msecscount < 10000: | ||
- | old = new | + | old = new |
- | new = msecscount | + | new = msecscount |
- | pl new - old | + | pl new - old |
end | end | ||
</sxh> | </sxh> | ||
Строка 170: | Строка 185: | ||
В течение десяти секунд будут выводиться фактические значения времени, прошедшего между вызовами локации-счётчика. | В течение десяти секунд будут выводиться фактические значения времени, прошедшего между вызовами локации-счётчика. | ||
- | Если установить переиод обращения к локации-счётчику равный нулю, локация-счётчик не будет вызываться совсем: | + | Если установить период обращения к локации-счётчику равный нулю, локация-счётчик не будет вызываться совсем: |
<sxh qsp> | <sxh qsp> | ||
Строка 179: | Строка 194: | ||
Смотрите так же, как реализуется игровое время, не привязанное к действительному: | Смотрите так же, как реализуется игровое время, не привязанное к действительному: | ||
- | * [[https://qsp.org/index.php?option=com_agora&task=topic&id=956&Itemid=57|Юлианских календарь от evp]] | + | * [[https://qsp.org/index.php?option=com_agora&task=topic&id=956&Itemid=57|Юлианских календарь от evp]] |
- | * [[https://qsp.org/index.php?option=com_agora&task=topic&id=956&Itemid=57|Реализация игрового времени]] | + | * [[https://qsp.org/index.php?option=com_agora&task=topic&id=956&Itemid=57|Реализация игрового времени]] |
- | + | ||
- | [[help:tuples|Вперёд: Кортежи]] | + | |
+ | [[help:classic_qsp|Вперёд: классический плеер]] | ||