Издательский дом ООО "Гейм Лэнд"СПЕЦВЫПУСК ЖУРНАЛА ХАКЕР #64, МАРТ 2006 г.

рецепты lua

АЛЕКСАНДР ГЛАДЫШ

Спецвыпуск: Хакер, номер #064, стр. 064-042-2


на полную мощность

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

Функции в Lua — значения первого класса. В Lua есть замыкания (closures). Функция может возвращать список значений... Если ты помнишь обо всем этом, то значительно облегчишь свой труд по разработке проекта. Подход с использованием корутин (coroutines) дает хорошее преимущество в объеме и прозрачности кода (если сравнивать с классическими системами взаимодействия с движком, основанными исключительно на обратных вызовах (callbacks) и/или событиях (events). Благодаря встроенным в язык возможностям рефлексии (например, функции type и функциям работы с таблицами), на Lua очень удобно реализуются связанные с ней задачи, скажем сериализация (пример такой реализации есть в книге Programming In Lua). Когда в движке требуются рефлективные возможности (для сериализации или автоматической генерации интерфейса редактирования данных), не пытайся прикрутить рефлексию к C++, а используй возможности Lua.

консоль игры

В поставку Lua, помимо исходников библиотеки для программной работы с интерпретатором (Lua C API), входят исходники интерактивного интерпретатора (lua.exe), очень удобного для изучения языка, быстрого тестирования и отладки небольших кусков кода. Пользуясь им, ты видишь результат выполнения написанного кода не отходя от кассы. Очень удобно реализовать функциональность, аналогичную той, которой обладает интерактивный интерпретатор Lua, в консоли игры. Тогда ты и твои дизайнеры смогут эффективно писать код в контексте твоего движка и немедленно просматривать то, как изменения в коде влияют на игровой мир.

перенаправление вывода

Посмотрим такой пример. В Lua нужно переопределить функцию print, чтобы она выводила текст не в стандартный поток вывода, а в игровую консоль. Функция print в Lua является частью базовой библиотеки языка и принимает список аргументов переменной длины. Она преобразует каждый из аргументов в строку при помощи функции tostring() и выводит ее разделяя символами табуляции.

Функции в Lua — значения первого класса (first-class values), их можно присваивать переменным, передавать в качестве аргументов и возвращать из других функций. Благодаря этому переопределение любой функции в Lua — не больше чем присвоение переменной с именем этой функции нового значения. Если у тебя есть функция __console_print, которая принимает строку и выводит ее в консоль, то переопределение системной функции print в Lua будет выглядеть, например, вот так:

Назад на стр. 064-042-1  Содержание  Вперед на стр. 064-042-3