From 557a9aab165eabca081c1803a04bd9bea6263076 Mon Sep 17 00:00:00 2001 From: oreolek Date: Tue, 26 Jan 2010 01:36:45 +0000 Subject: [PATCH] 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. --- doc/manual.tex | 74 +++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 73 insertions(+), 1 deletion(-) diff --git a/doc/manual.tex b/doc/manual.tex index 9ba4c08..7e0f094 100644 --- a/doc/manual.tex +++ b/doc/manual.tex @@ -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.