Рассылка закрыта
При закрытии подписчики были переданы в рассылку "RFpro.ru: Flash-анимация" на которую и рекомендуем вам подписаться.
Вы можете найти рассылки сходной тематики в Каталоге рассылок.
В этом выпуске рассылки мы рассмотрим следующие вопросы, относящиеся к проектированию игр на Flash/Flex (Язык программирования ActionScript 3.0).
Добрый день, уважаемые читатели!В этом выпуске рассылки мы рассмотрим следующие вопросы, относящиеся к проектированию игр на Flash/Flex (Язык программирования ActionScript 3.0).
При этом везде, где это возможно, будем описывать необходимые величины, например, положение объектов и структуру меню, в файле формата XML. Описание свойств объектов в формате XMLРассмотрим начальный вариант файла описания. В дальнейшем добавим еще разделы. <?xml version="1.0" encoding="utf-8"?> В данном варианте текст состоит из двух разделов: pictures и menus. Поместим файлы с изображениями в папку images/forGames, и напишем имена каждого из этих файлов в атрибут name тега pict. В том же теге укажем и другие свойства изображения: координаты x и y, а также степень прозрачности alpha. Расстановка картинок Как и в прежних наших упражнениях, будем управлять игрой следующим образом: каждый раз, когда происходит некоторое событие, будет изменяться значение переменной _state (состояние). Для того, чтобы соответствующая переменная вела себя как свойство State используем аппарат геттеров и сеттеров. В данном случае, сразу после завершения загрузки изображений присвоим нашему свойству State значение Start. private function set State(newState:String):void{ В данном случае мы описали только одно состояние, остальные добавим потом, когда разработаем сценарий игры. Преобразование типов данных (лирическое отступление)Обратите внимание, как легко в языке ActionScript 3.0 преобразуется тип данных. var aa:Number = Number(cImage.@alpha); Построение меню по его XML-описаниюРаздел menus нашего XML-файла, текст которого приведен выше, состоит из элементов menu, каждый из которых соответствует пункту Верхнего меню. Например, тег: <menu name="Установка" func="show"> должен соответствовать позиции (кнопке) Главного меню, с нанесенной на ней надписи "Установка". Второй атрибут этого тега я добавил исключительно "для красоты", можно было бы обойтись без него, поскольку
и так понятно, что если пункт относится к верхнему меню, то функция обработки события "щелчек мышкой" должна вызвать показ подменю. Правда, в некоторых случаях для этих кнопок подменю отсутствует. package Построение меню выполняется в методе getXml(xml:XML,xx:uint,yy:uint). Просмотр документа XML происходит с помощью цикла: for each (var item:XML in xml..menu). Обратите внимание, что можно не знать, на каком уровне иерархии находится соответствующий раздел документа, достаточно знать его имя (имя соответствующего тега). Иначе говоря, тег <menu> может находиться внутри любого раздела документа, для его поиска достаточно написать две точки, как показано в этом примере. Описания константВсе константы в данном проекте я поместил в отдельный модуль, содержащий класс Constants. Вот его текст: Сам по себе он особого интереса не представляет, и является всего лишь примером подобного использования классов. Кроме того, если бы я его не привел, Ваш проект бы не компилировался. Как видите, все константы объявлены с атрибутами public static. Первое понятно: зачем скрывать константу, раз ее все равно нельзя изменить? Использование атрибута static означает, что соответствующая информация находится в оперативной памяти постоянно, в течение всего времени работы программы.
Это дает выигрыш во времени выборки, поскольку не требует обращения к диску, но несколько увеличивает требуемый объем оперативной памяти. Впрочем, при необходимости операционная система все равно отберет у приложения нужное количество разделов памяти, и отправит всю сохранявшуюся в ней информацию на диск, в файл подкачки. Ассоциативные массивыНапомню, что в отличие от "обычного" массива, Ассоциативный состоит из двух компонентов: ключи и значения. Удобство их использования заключается в том, что нет необходимости помнить порядковый номер какого-либо элемента, достаточно знать его ключ. В качестве ключа можно использовать (почти) любое, обычно строковое значение. Этим облегчается поиск нужного элемента. Меню на ActionScript 3.0Рассмотрим текст модуля Menu: package В нашем случае ассоциативный массив используется для решения задачи поиска подменю. Каждое создаваемое подменю представляет собойобъект по имени subMenu: экземпляр класса Sprite, в список видимости которого добавлены соответствующие кнопки. Для демонстрации подменю нужно:
Все это реализовано в фунции:
Выполнение этих требований полагаю, не вызывает трудностей: обычное использование таймера и обработчиков соответствующих событий. В приводимом выше тексте модуля все прокомментировано достаточно подробно. Главный модульТекст главного модуля в его начальном состоянии приводится ниже с подробными комментариями: ЗаключениеВ следующий раз мы наполним эту игру содержанием, поначалу не очень сложным. Придадим объектам физические свойства, свяжем их и заставим перемещаться. Например, воздушный шар будет двигаться в определенном направлении, которое определяется силой и направлением ветра, давлением газа у него внутри, а также весом самого шара и человечка, который будет за него держаться. Задачей может быть, например, взлететь как можно выше и вернуться, не наткнувшись на препятствие. При накачивании шара с помощью насоса нужно подобрать не слишком маленькое давление (тогда далеко не улетишь), и не слишком большое (шарик лопнет и вообще не взлетишь). Возможно, кто-либо из моих читателей предложит сценарий игры, а я расскажу, как его реализовать. |
В избранное | ||