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:
Alexander Yakovlev 2010-01-26 01:36:45 +00:00
parent 071b2c0003
commit 557a9aab16

View file

@ -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.