Lua

Материал из wiki.appsalutecreator.com
Версия от 13:27, 15 февраля 2016; Evereskun (обсуждение | вклад) (Доступные библиотеки)
Перейти к: навигация, поиск

Lua - скриптовый язык программирования.

Введение

Lua - динамически типизированный язык, предназначенный для использования в качестве расширения или в качестве скриптового языка, и при этом достаточно компактный, чтобы поместиться на различных исполняющих платформах. Он поддерживает небольшое количество структур данных, такие как логические значения, числа (по умолчанию — двойной точности с плавающей точкой), а также строки.

Используется для удобства вычислений и увеличения скорости исполнения кода.

Создание скрипта

В машине состояний, выбрав добавляемое свойство, создаем или открываем уже существующий скрипт (edit script):

Edit script.png

Основные функции

При создании скриптов в первой вкладке всегда создается файл viewer.lua, где перечислен список доступных функций и параметров.

Существует четыре вида функций для взаимодействия скрипта с машиной состояний:

Func.png


Добавлены функции (вытягивание данных из текстовой базы):

viewer.getResFromTxtDB(txtID,tp,defValue)

viewer.getStrFromTxtDB(txtID,sense,defValue)

С их помощью можно вытянуть иконку из текстовой базы и вытянуть текст по текущей локализации.

Частично доступна библиотека os:

date

difftime

time

Она позволит нам форматировать время.

Доступные библиотеки

1. Базовая библиотека стандартных функций Lua (Basic Functions)

Функции базовой библиотеки Lua размещаются в глобальном контексте.

В базовую библиотеку входят следующие функции:

  • assert - Генерирует ошибку с необязательным сообщением об ошибке, если значение первого аргумента false или nil.
  • collectgarbage - Обеспечивает интерфейс к сборщику мусора. Первый аргумент определяет выполняемое действие (остановка, запуск сборщика мусора, выполнение сборки мусора и др.).
  • error - Завершает выполнение последней функции, вызванной в защищённом режиме, с заданным сообщением об ошибке.
  • getfenv - Возвращает таблицу контекста заданной функции. Аргумент, определяющий функцию, может быть как, собственно, Lua-функцией, так и числом, определяющим уровень стека, на котором расположена функция. Если он равен 0, возвращается глобальный контекст.
  • getmetatable - Если объект не имеет метатаблицы, возвращает nil. Иначе, если в метатаблице есть поле __metatable, возвращает значение этого поля. В противном случае возвращает метатаблицу объекта.
  • ipairs - Возвращает итератор, таблицу и 0. Возвращаемый итератор проходит таблицу по целочисленным индексам от значения 1 до первого индекса со значением nil. Итератор возвращает текущий индекс и соответствующее ему значение.
  • next - Возвращает следующий (после заданного) индекс в таблице и соответствующее ему значение. Позволяет последовательно получить все поля таблицы.
  • pairs - Возвращает итератор next(), таблицу и nil. Возвращаемый итератор проходит таблицу по всем значениям индекса. Итератор возвращает текущий индекс и соответствующее ему значение.
  • pcall - Вызывает заданную функцию с аргументами в защищённом режиме. Возвращает статус успешности выполнения.
  • rawequal - Сравнивает два объекта, без вызова каких-либо метаметодов. Возвращает значение типа boolean.
  • rawget - Возвращает реальное значение с заданным индексом из таблицы, без вызова каких-либо метаметодов.
  • rawset - Помещает значение в поле таблицы с заданным индексом, без вызова каких-либо метаметодов.
  • select - Если первый аргумент функции имеет числовое значение, возвращаются все аргументы, следующие за аргументом с этим номером. Если первый аргумент — строка ’#’, возвращается общее число полученных аргументов.
  • setfenv - Устанавливает таблицу в качестве контекста для заданной функции. Аргумент, задающий функцию, может быть числом, определяющим положение функции на стеке вызовов. Если он равен 0, устанавливается глобальный контекст текущего потока.
  • setmetatable - Устанавливает (удаляет) метатаблицу для данной таблицы. Если метатаблица содержит поле __metatable, генерирует ошибку.
  • tonumber - Пытается конвертировать аргумент в число. Если конвертирование не удаётся, возвращает nil.
  • tostring - Преобразует аргумент любого типа в строку.
  • type - Возвращает тип аргумента в виде строки.
  • unpack - Возвращает элементы из заданной таблицы.
  • xpcall Вызывает заданную функцию в защищённом режиме. В отличие от pcall, позволяет установить обработчик ошибок. Не поддерживает передачу аргументов в функцию.

2. Библиотека для работы со строками Lua (String Manipulation)

Все функции для работы со строками собраны в таблице string. Поэтому для вызова функций используется запись вида: string.имя_функции(...)

  • len - Возвращает длину строки.
  • rep - Возвращает строку, содержащую указанное число копий исходной строки.
  • lower - Заменяет все прописные буквы в строке на строчные.
  • upper - Заменяет в строке все строчные буквы на прописные.
  • reverse - Возвращает строку, в которой символы исходной строки расположены в обратном порядке.
  • format - Генерирует строку по форматной строке и аргументам по правилам, принятым в языке C.
  • byte - Возвращает числовые коды символов строки.
  • char - Преобразует набор числовых кодов символов в строку.
  • find - Выполняет поиск в строке первого вхождения подстроки, соответствующей заданному шаблону. Возвращает индексы начального и конечного символов найденной подстроки.
  • match - Выполняет поиск в строке первого вхождения подстроки, соответствующей заданному шаблону. Возвращает найденную подстроку.
  • gmatch - Возвращает итератор, который на каждой итерации возвращает подстроку, соответствующую заданному шаблону.
  • sub - Возвращает подстроку исходной строки.
  • gsub - Возвращает копию исходной строки, в которой все вхождения шаблона заменены на строку, заданную третьим аргументом. Этот аргумент может быть строкой, таблицей или функцией.
  • dump - Возвращает строку, содержащую двоичное представление функции Lua с заданным именем.

3. Математическая библиотека Lua (Mathematical Functions)

Математические функции собраны в таблице math. Для вызова функций используется запись вида: math.имя_функции(...)

  • abs - Возвращает модуль числа.
  • ceil - Возвращает наименьшее целое число, большее или равное заданному (выполняет округление «вверх»).
  • floor - Возвращает наибольшее целое число, меньшее или равное заданному (выполняет округление «вниз»).
  • max - Возвращает максимальный из аргументов.
  • min - Возвращает минимальный из аргументов.
  • fmod - Возвращает остаток от деления одного числа на другое.
  • modf - Возвращает целую и дробную части исходного числа.
  • frexp - Возвращает нормализованную мантиссу и показатель аргумента.
  • ldexp - Строит число по мантиссе и показателю.
  • pow - Возводит число в степень. Вместо вызова функции возможно использование выражения вида x^y.
  • sqrt - Вычисляет квадратный корень числа. Вместо вызова функции возможно использование выражения вида x^0.5.
  • exp - Возвращает ex.
  • log - Вычисляет натуральный логарифм.
  • log10 - Вычисляет логарифм по основанию 10.
  • cos - Вычисляет косинус угла, заданного в радианах.
  • sin - Вычисляет синус угла, заданного в радианах.
  • tan - Вычисляет тангенс угла, заданного в радианах.
  • cosh - Вычисляет гиперболический косинус.
  • sinh - Вычисляет гиперболический синус.
  • tanh - Вычисляет гиперболический тангенс.
  • acos - Вычисляет арккосинус (в радианах).
  • asin - Вычисляет арксинус (в радианах).
  • atan - Вычисляет арктангенс (в радианах).
  • atan2 - Возвращает арктангенс x/y (в радианах), но использует знаки обоих параметров для вычисления «четверти» на плоскости. Также корректно обрабатывает случай когда y равен нулю.
  • deg - Переводит величину угла из радиан в градусы.
  • rad - Переводит величину угла из градусов в радианы.
  • random - Функция, вызванная без аргументов, возвращает псевдослучайное число из интервала [0, 1). Эта же функция, вызванная с аргументом n, возвращает целое псевдослучайное число из интервала [1, n]. Эта же функция, вызванная с двумя аргументами l, u возвращает целое псевдослучайное число из интервала [l, u].
  • randomseed - Устанавливает стартовое число генератора псевдослучайных чисел.

Отладка

print(e1, e2, ...) Печатает значения аргументов. В конце выводится перевод строки. Эта функция не предназначена для форматного вывода, а только для быстрого (отладочного) вывода значений переменных.


В app.icf при установке

[GameTrace]

Level="Verbose"

В логе у нас появятся данные из скриптов со всеми операциями:

D/IScript IScript::callScriptMethod() callScriptMethod: "lottery_scpt:init"

D/IScript viewer_getResFromTxtDB() viewer.getResFromTxtDB(5670,0,666)->666


Self2.png

ID("control") - функция, которая возвращает ID объекта с именем "control" - сделано для удобства переноса скриптов из одного проекта в другой, не подвязываясь к ID объекта. НО, при импорте скрипта в другой проект важно проверять наличие объектов с таким же именем. Их быть не должно! В противном случае при сохранении проекта в редакторе будет выдаваться ошибка

Errorscript.png

Пример использования

Рассмотрим пример использования скрипта для написания программы Калькулятор

Project.png

Создаем машину состояний с именем "control", в ней создаем скрипт obj_control.lua. В функции init () объявляем переменные:

Self.png

1. По тапу на кнопки 0-9 записываем машине соответствующий параметр и вызываем состояние pressedDigit:

0digit.png

При вызове состояния pressedDigit скрипт вызывает функцию pressedDigit():

Объявляем локальную переменную local digit, в которую будем записывать значение параметра pressed (записанное по тапу на кнопку).

Presseddigit.png

2. Аналогично по тапу на кнопки операторов записываем параметр и вызываем функцию pressedOperator():

Operator.png

Oper.png

3. Вызов функции pressedRavnо(), вычисление и вывод результата:

Ravno.png

Res2.png

Пример реализации

Download

Литература

1. Официальный сайт Lua - http://www.lua.org/home.html

2. http://tylerneylon.com/a/learn-lua/

3. http://docs.madewithmarmalade.com/display/MD/Introduction+to+Lua

4. Программа - интерпретатор для работы со скриптами Lua - ZeroBrane Studio: http://studio.zerobrane.com/