Mentioned timer, input and txtnb. I am no expert in timer and input, and I don't understand the return "look" thingy; however, I tried my best to explain. hope there're no mistakes.
Okay, now the docs synchronized with INSTEAD 1.1.0.
This commit is contained in:
parent
071b2c0003
commit
557a9aab16
|
@ -514,6 +514,73 @@ game.inv = function()
|
|||
end;
|
||||
\end{verbatim}
|
||||
|
||||
\subsection{Таймер}
|
||||
\index{Объекты!timer}
|
||||
\label{objects_timer}
|
||||
Таймер --- это объект \verb/timer/, который служит для отсчёта \textbf{реального} времени (в миллисекундах). В этом его существенное отличие от атрибутов \verb/life/, которые служат для измерения игрового времени (в шагах).
|
||||
|
||||
Для управления таймером используются функции:
|
||||
|
||||
\begin{description}
|
||||
\item[timer:set(ms)] задать интервал таймера в миллисекундах
|
||||
\item[timer:del()] отключить таймер
|
||||
\item[timer.callback(s)] функция-обработчик таймера, которая вызывается через заданный интервал времени
|
||||
\end{description}
|
||||
|
||||
Двоеточия при вызове \verb/set/ и \verb/del/ важны, их не стоит заменять на точки. По умолчанию таймер включён, но не имеет заданного обработчика. Если таймер выключен, то обработчик не вызывается. Если таймер включён, то обработчик вызывается с заданным интервалом.
|
||||
|
||||
Пример использования таймера:
|
||||
|
||||
\begin{verbatim}
|
||||
timer.callback = function(s)
|
||||
main.time = main.time + 1;
|
||||
return "look";
|
||||
end
|
||||
timer:set(100);
|
||||
|
||||
main = room {
|
||||
time = 1,
|
||||
force_dsc = true,
|
||||
nam = 'Таймер',
|
||||
dsc = function(s)
|
||||
return 'Демонстрация: '..tostring(s._time);
|
||||
end
|
||||
};
|
||||
\end{verbatim}
|
||||
|
||||
\subsection{Ввод с клавиатуры}
|
||||
\index{Объекты!input}
|
||||
\label{objects_input}
|
||||
Ввод с клавиатуры анализируется при помощи объекта \verb/input/. Этот объект принимает все нажатия клавиш. По умолчанию он не имеет запрограммированных обработчиков, поэтому ничего не выполняет.
|
||||
|
||||
Создание нового обработчика для клавиши выполняется командой \verb/input.key(s, pressed, key),/ где \verb/pressed/ -- нажатие или отжатие, \verb/key/ -- символьное имя клавиши;
|
||||
|
||||
Если обработчик возвращает не \verb/nil/, то клавиша обрабатывается \textbf{им}, а не интерпретатором. Таким образом, можно переопределить обработку любой клавиши.
|
||||
|
||||
Например:
|
||||
|
||||
\begin{verbatim}
|
||||
input.key = function(s, pr, key)
|
||||
if not pr or key == "escape" then return
|
||||
elseif key == 'space' then key = ' '
|
||||
elseif key == 'return' then key = '^';
|
||||
end
|
||||
if key:len() > 1 then return end
|
||||
main.txt = main.txt:gsub('_$','');
|
||||
main.txt = main.txt..key..'_';
|
||||
return "look";
|
||||
end
|
||||
|
||||
main = room {
|
||||
txt = '_',
|
||||
force_dsc = true,
|
||||
nam = 'Клавиатура',
|
||||
dsc = function(s)
|
||||
return 'Демонстрация: '..tostring(s._txt);
|
||||
end
|
||||
};
|
||||
\end{verbatim}
|
||||
|
||||
\section{Диалоги}
|
||||
|
||||
\index{Диалоги}
|
||||
|
@ -724,13 +791,15 @@ mycat = obj {
|
|||
Вы можете вернуть из обработчика life второй код возврата, важность. (true или false). Если он равен true, то возвращаемое значение будет выведено ДО описания объектов; по умолчанию значение равно false.
|
||||
|
||||
\index{Переменные!ACTION\_TEXT}
|
||||
Если вы хотите <<очистить экран>>, то можно воспользоваться вот каким хаком. Из метода \verb/life/ доступна переменная \verb/ACTION_TEXT/ --- это тот текст, который содержит реакцию на действие игрока. Соответственно, сделав \verb/ACTION_TEXT = nil/, можно <<запретить>> вывод реакции. Например, для перехода на конец игры можно сделать:
|
||||
Если вы хотите <<очистить экран>>, то можно воспользоваться следующим хаком. Из метода \verb/life/ доступна переменная \verb/ACTION_TEXT/ --- это тот текст, который содержит реакцию на действие игрока. Соответственно, сделав \verb/ACTION_TEXT = nil/, можно <<запретить>> вывод реакции. Например, для перехода на конец игры можно сделать:
|
||||
|
||||
\begin{verbatim}
|
||||
ACTION_TEXT = nil
|
||||
return goto('theend'), true
|
||||
\end{verbatim}
|
||||
|
||||
Также для добавления динамики в игру служат объекты timer и input, см. разделы \ref{objects_timer} и \ref{objects_input}.
|
||||
|
||||
\section{Краски и звуки}
|
||||
|
||||
В чём очевидное преимущество графического интерпретатора над текстовой веткой --- это то, что он может говорить и показывать. Проще говоря, вы можете добавить в игру графику и музыку.
|
||||
|
@ -788,8 +857,11 @@ SDL-INSTEAD поддерживает простое форматирование
|
|||
\item[txtb(текст)] \index{Функции!txtb} --- полужирное начертание
|
||||
\item[txtem(текст)] \index{Функции!txtem} --- начертание курсивом
|
||||
\item[txtu(текст)] \index{Функции!txtu} --- подчёркнутый текст
|
||||
\item[txtnb(текст)] \index{Функции!txtnb} --- делает все пробелы в тексте неразрывными.
|
||||
\end{description}
|
||||
|
||||
Немного по последней функции. Код \verb/txtnb(' ')/ даст вам один неразрывный пробел. Неразрывный пробел - это пробел, который нельзя заменить переходом на новую строку. То есть, если вы напишете \verb/txtnb('a b')/, то это будет гарантировать вам, что \verb/a/ и \verb/b/ находятся на одной строке, а не на разных.
|
||||
|
||||
\subsection{Проверка правописания}
|
||||
Проверка правописания готовой игры --- это большая головная боль. У вас есть примерно 100 Кб кода, в которых находятся около 80 Кб текста. Любая программа проверки орфографии будет сильно ругаться на синтаксис Lua и мешать. Один из способов проверки --- использовать редактор Emacs.
|
||||
|
||||
|
|
Loading…
Reference in a new issue