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;
|
||||||
\end{verbatim}
|
\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{Диалоги}
|
\section{Диалоги}
|
||||||
|
|
||||||
\index{Диалоги}
|
\index{Диалоги}
|
||||||
|
@ -724,13 +791,15 @@ mycat = obj {
|
||||||
Вы можете вернуть из обработчика life второй код возврата, важность. (true или false). Если он равен true, то возвращаемое значение будет выведено ДО описания объектов; по умолчанию значение равно false.
|
Вы можете вернуть из обработчика life второй код возврата, важность. (true или false). Если он равен true, то возвращаемое значение будет выведено ДО описания объектов; по умолчанию значение равно false.
|
||||||
|
|
||||||
\index{Переменные!ACTION\_TEXT}
|
\index{Переменные!ACTION\_TEXT}
|
||||||
Если вы хотите <<очистить экран>>, то можно воспользоваться вот каким хаком. Из метода \verb/life/ доступна переменная \verb/ACTION_TEXT/ --- это тот текст, который содержит реакцию на действие игрока. Соответственно, сделав \verb/ACTION_TEXT = nil/, можно <<запретить>> вывод реакции. Например, для перехода на конец игры можно сделать:
|
Если вы хотите <<очистить экран>>, то можно воспользоваться следующим хаком. Из метода \verb/life/ доступна переменная \verb/ACTION_TEXT/ --- это тот текст, который содержит реакцию на действие игрока. Соответственно, сделав \verb/ACTION_TEXT = nil/, можно <<запретить>> вывод реакции. Например, для перехода на конец игры можно сделать:
|
||||||
|
|
||||||
\begin{verbatim}
|
\begin{verbatim}
|
||||||
ACTION_TEXT = nil
|
ACTION_TEXT = nil
|
||||||
return goto('theend'), true
|
return goto('theend'), true
|
||||||
\end{verbatim}
|
\end{verbatim}
|
||||||
|
|
||||||
|
Также для добавления динамики в игру служат объекты timer и input, см. разделы \ref{objects_timer} и \ref{objects_input}.
|
||||||
|
|
||||||
\section{Краски и звуки}
|
\section{Краски и звуки}
|
||||||
|
|
||||||
В чём очевидное преимущество графического интерпретатора над текстовой веткой --- это то, что он может говорить и показывать. Проще говоря, вы можете добавить в игру графику и музыку.
|
В чём очевидное преимущество графического интерпретатора над текстовой веткой --- это то, что он может говорить и показывать. Проще говоря, вы можете добавить в игру графику и музыку.
|
||||||
|
@ -788,8 +857,11 @@ SDL-INSTEAD поддерживает простое форматирование
|
||||||
\item[txtb(текст)] \index{Функции!txtb} --- полужирное начертание
|
\item[txtb(текст)] \index{Функции!txtb} --- полужирное начертание
|
||||||
\item[txtem(текст)] \index{Функции!txtem} --- начертание курсивом
|
\item[txtem(текст)] \index{Функции!txtem} --- начертание курсивом
|
||||||
\item[txtu(текст)] \index{Функции!txtu} --- подчёркнутый текст
|
\item[txtu(текст)] \index{Функции!txtu} --- подчёркнутый текст
|
||||||
|
\item[txtnb(текст)] \index{Функции!txtnb} --- делает все пробелы в тексте неразрывными.
|
||||||
\end{description}
|
\end{description}
|
||||||
|
|
||||||
|
Немного по последней функции. Код \verb/txtnb(' ')/ даст вам один неразрывный пробел. Неразрывный пробел - это пробел, который нельзя заменить переходом на новую строку. То есть, если вы напишете \verb/txtnb('a b')/, то это будет гарантировать вам, что \verb/a/ и \verb/b/ находятся на одной строке, а не на разных.
|
||||||
|
|
||||||
\subsection{Проверка правописания}
|
\subsection{Проверка правописания}
|
||||||
Проверка правописания готовой игры --- это большая головная боль. У вас есть примерно 100 Кб кода, в которых находятся около 80 Кб текста. Любая программа проверки орфографии будет сильно ругаться на синтаксис Lua и мешать. Один из способов проверки --- использовать редактор Emacs.
|
Проверка правописания готовой игры --- это большая головная боль. У вас есть примерно 100 Кб кода, в которых находятся около 80 Кб текста. Любая программа проверки орфографии будет сильно ругаться на синтаксис Lua и мешать. Один из способов проверки --- использовать редактор Emacs.
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue