Инструменты пользователя

Инструменты сайта


help:realtime

Различия

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

Ссылка на это сравнение

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>​
Строка 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|Вперёд:​ классический плеер]]
  
help/realtime.1672749818.txt.gz · Последние изменения: 2023/01/03 12:43 — aleks_versus