Уроки по Leadwerks. Сначала переводы по Луа, потом С++
Что такое LUA?
LUA это скриптовый язык программирования, который может использоваться для создания всего проекта вашей игры. Можно использовать LUA для создания своих программ, игровых скриптов в редакторе Leadwerks, и скриптов классов. В этом уроке продемонстрируется, как создать простой скрипт-программу для Leadwerks на этом языке.
Скрипт на LUA имеет расширение файла *.lua
Скрипт на LUA может быть "скомпилирован" - переведен в понятный компьютеру двоичный код. Так как LUA скриптовый ЯП, необязательно компилировать - скрипты выполняются в интерпретаторе, которые компилируют его на ходу. Скомпилированный LUA скрипт имеет расширение *.luac.
Редактор LUA скриптов
Leadwerks Engine SDK содержит редактор скриптов - удобную вещь для их написания и редактирования. Вы можете связать файлы .lua с редактором. Он находится в папке, куда вы установили Leadwerks, под именем "ScriptEditor.exe". Теперь можно бдует открывать скрипты двоиным щеклчком мыши, как любой другой файл. ЗАПОМНИТЕ: вы не можете редактировать скомпилированные LUA скрипты! Если вы запускаете редактор скриптов не из Leadwerks Editor, то вы можете компилировать, запускать и отлаживать скрипты.
Запуск. Мы можем запустить скрипт нажатием клавиши F5 в редакторе или соответствующей кнопки. Когда мы запускаем скрипт, используется engine.exe в папке с SDK.
Отладка. Мы можем отладить скрипт (нужно для исправления фактических ошибок, типа "+" вместо "-"). Используется engine.debug.exe.
Компиляция. Можно скомпилировать скрипт (клавиша F6 иои кнопка на тулбаре). Будет показано сообщение, что скрипт превращен в *.luac файл.
Скриптинг в редакторе уровней
Также можно делать скрипты внутри Leadwerks Editor, но: нельзя компилировать и отлаживать скрипты. Также нельзя забывать про LUA State.
LUA State Это временный раздел памяти, запоминающий изменения, сделанные пока скрипт выполняется. Например: вы стреляете и убиваете врага. Когда вы запускаете игру в Editor из редактора скриптов, то LUA State не очистится, и при следющем запуске скрипта враг все равно будет мертв. Если мы используем кнопку Game Script или сочетание Ctrl+G, мы запускаем те же скрипты, но при конце игры память очищается - при следующем запуске враг будет жив. Можно также очистить память загрузкой или оьновлением сцены.
Создание и настройка вашего первого проекта Для начала создадим новую папку и дадим ей имя нашего проекта. К примеру, Project 1. Неважно, где вы ее создаете (однако важно, чтобы в пути не было кириллицы). Скопируйте следующие файлы из папки с SDK в нашу папку:
Папка Scripts. Очень важно скопировать эти скрипты, потому что они содержат основные скрипты для доступа к ядру движка Leadwerks.
engine.exe. Самый важный файл. Это и есть обработчик ядра движка для скриптинга в LUA. Ни в коем случае не забывайте копировать его!
engine.debug.exe. Это версия ядра, ипользуемая в отладчике. В принципе, если вы не будете отлаживать скрипт, моэно не копировать. Но лучше все-таки сделать это. Если копируете, то вместе с engine.debug.dll.
Shaders.pak. Архив с шейдерами. Без него ядро не запустится. Обязательно копируйте его! P.S. Архивчик легко открывается WinRAR'ом
newton.dll. Физический движок Newton. No comments.
Engine.dll. Вот оно, само ядро движка. Используется engine.exe'ом. При использовании C++/C# вы должны подключить её к проекту.
JointLibrary.dll. Библиотека для просчета костей в физике.
Скопируйте все эти файлы. Вот, что получилось:
Ваш первый скрипт Приступим к созданию первого скрипта. Примечание: не копипастьте команды отсюда, а вводите сами. Так вы лучше поймете движок. Также будет хорошо, если вы попробуете менять параметры и значения, передаваемые командам. Если что-то не получается, пишите в эту тему.
Для начала создадим новый .lua файл (создайте просто текстовый документ и сменить расширение на .lua). Назовить его start.lua (этот скрипт запсукается первым, если вы сразу запускаете engine.exe, а не из редактора скриптов).
Комментарии: на код программы они не влияют, они нужны для того, чтобы код написанный вами был понятен другому человеку. Либо вам, если вы вернетесь к скрипту через месяц. Иначе, вы ничего не поймете и ваше лицо будет таким: . Есть два типа комментариев: однотсрочный и многострочный. Однострочный комментарий начинается с символов "--" делается так:
Quote (LUA)
--Комментарий А это код скрипта --Это тоже комментарий
Многострочные комментарии начинаются символов "--[[" и заканчиваются "]]--".
Quote (LUA)
--[[ Это комментарий Это тоже комментарий ]]-- А это нет
Давайте напишем первый код:
Quote (LUA)
-- Зарегистрируем абстрактный путь RegisterAbstractPath("")
Этот путь указывает на то, где лежат данные проекта (модели, текстуры). "" обзначает, что будет использоваться папка, откуда запускается программа. Иначе надо было бы вводить всякие ненадежные пути типа "C:\Models\".
Давайте создадим графическое окно.
Quote (LUA)
Graphics(1024, 768)
Это команда в нашем случае берет 2 параметра в скобках: высота и ширина окна.
Дальше, давайте создадим пустой пока мир:
Quote (LUA)
fw = CreateWorld()
Все наши загруженные модели, созданные объекты, etc попадут в этот мир. Он хранится в переменной fw.
Quote (LUA)
-- Создадим камеру camera = CreateCamera() -- Переместим нашу камеру в позицию 0, 0, -5 (оси xyz) - немнего назад. camera:SetPosition(Vec3(0, -5, 0); --кубик. CreateCube() создаст его. cube = CreateCube()
Теперь давайте создадим бесконечный цикл, отвечающий за рендеринг сцены, но он закончится, когда мы закроем приложение.
Quote (LUA)
-- Пока приложению не дана команда закрыться, надо рендерить. while AppTerminate() == 0 do fw:Update() fw:Render() Flip(0)
end
while..do...end обозначает "Пока условие верное, выполнять тело цикла". Команда Update() выполняет обновление физики. Render() отвечает за рендеринг. Flip(0) нужен, чтобы перевернуть местами буферы, отрисованноый на экране и который мы только что отрисовали в памяти. end - конец цикла и выполнения программы (дальше нет команд, нечего выполнять).
Готовый скрипт: NextMail.ru Скрин скрипта: Скрин того, что получилось: Прямо ГТА5, не так ли?
Освещение внутри Leadwerks Editor
Leadwerks Editor 2.3 поставляется с тремя различными типами световых источников.
Directional Light Глобальный источник который освещает всю сцену с одного направления и расстояния.
Point Light Централизованный источник, освещающий во всех направлениях с указанным углом (расстоянием).
SpotLight Освещает сцену только в одном направлении с указанным углом света и расстоянием.
Создание источников света из LUA Для начала мы возьмем код из прошлого примера и подкорректируем его, а именно: