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

дублер каскадера

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

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


Мы же рассмотрим еще один подход к хранению данных, основанный на применении языка Lua.

[начнем с примера.]

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

Нужно отметить, что хотя пример основан на реальных данных, при его реализации не ставилась цель продемонстрировать создание полнофункциональной системы описания пользовательского интерфейса. Основная цель примера – иллюстрация описываемого подхода к разработке форматов хранения данных. Полный код примера вместе со всеми необходимыми для сборки материалами можно найти на диске к журналу.

Прототип пользовательского интерфейса, который мы хотим описать, схематически представлен на рисунке. Для каждого состояния всех элементов интерфейса (включая «задники» панелей) художник создает уникальное изображение.

Как бы это было на XML

Схему можно описать при помощи XML примерно таким образом:

<gui_layout name=“gamegui”>

<panel name=”mainmenu” modal=”true” hidden=”false”>

<button name=”newgame”/>

<button name=”settings”/>

<button name=”exit”/>

</panel>

<panel name=”settings” modal=”true” hidden=”true”>

<checkbox name=”mute_all”/>

<checkbox name=”mute_sfx”/>

<checkbox name=”mute_speech”/>

<checkbox name=”mute_music”/>

<button name=”ok”/>

<button name=”cancel”/>

</panel>

</gui_layout>

Нужно обратить внимание на то, что здесь отсутствует описание логики работы интерфейса – дана только его структура. В зависимости от реализации можно выбрать разные средства задания логики – вплоть до встраивания кода обработчиков событий на Lua непосредственно в данные на XML.

gui_layout “gamegui”

{

panel “mainmenu”

{

modal;

button ”newgame”;

button ”settings”;

button “exit”;

};

panel “settings”

{

modal;

hidden;

checkbox ”mute_all”;

checkbox ”mute_sfx”;

checkbox ”mute_speech”;

checkbox ”mute_music”;

button ”ok”;

button ”cancel”;

};

};

Преимущества читабельности налицо – объем текста меньше примерно в два раза при том же объеме полезной информации. К тому же, приведенный выше текст – валидный код на Lua. Не просто описание данных – а именно код, набор вызовов функций.

[как добиться, чтобы это работало.]

Начнем с того, что функции в Lua – значения первого класса (first class values). Это, в частности, значит, что функции можно присваивать переменным, передавать функциям в качестве параметров и использовать в качестве возвращаемых значений функций.

От своего предка, языка описания данных Sol, Lua унаследовал некоторые особенности синтаксиса, позволяющие этому коду выполняться. Здесь используется то, что Lua позволяет опускать скобки при передаче функции в качестве единственного параметра строкового литерала, либо конструктора таблицы. Таким образом, с точки зрения языка, в коде, приведенном выше, вокруг каждой пары кавычек и каждой пары фигурных скобок стоят «неявные» круглые скобки.

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