Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Программирование игр на Flash/Flex Дополнение к предыдущему выпуску


Добрый день, уважаемые читатели!

К сожалению, предыдущий выпуск по моему недосмотру не содержит нужной информации. Спешу исправить. Один из разделов следует читать так:

Управление работой приложения с помощью меню

Элементы меню нижнего уровня в нашей игре будут связаны с изменением состояния программы, как это в начальном виде было реализовано в предыдущем выпуске рассылки. Напомню, что для решения этой задачи мы ввели закрытую переменную _state и связали с ней метод, именуемый Сеттер:
public function set State(newState:String):void{

Остается дописать этот метод так, чтобы он работал для обработки события, вызванного любым элементом меню второго уровня. Выше мы разобрались с тем, как получить указатель на объект, вызвавший событие. Однако, удобнее для идентификации соответствующего элемента меню использовать надпись на нем. При этом нужно также учесть, что некоторые элементы могут иметь одинаковые надписи. Чтобы в этом разобраться, рассмотрим фрагмент XML-документа, описывающего меню:
<menus>
<menu name="Установка" func="show">
<item name="Правила"/>
<item name="Выполнить" />
<item name="Сохранить" />
</menu>
<menu name="Игра" func="show">
<item name="Правила"/>
<item name="Начать" />
<item name="Продолжить" />
<item name="Следующая" />
<item name="Завершить" />
</menu>
</menus>

Как видите, здесь описано меню, состоящее из двух элементов верхнего уровня: <menu name="Установка" func="show"> и <menu name="Игра" func="show">. В той и в другой группе (подменю) имеется позиция Правила: <item name="Правила"/>. При выборе пользователем первого из этих вариантов ему будет выведен текст с правилами игры, во втором - с правилами установки начальных позиций динамических элементов нашей игры.
Возможно, этот случай нетипичный, но все же его лучше учесть, тем более, что это совсем несложно сделать. Отметим, что в современной версии Adobe Flash можно использовать кириллицу в именах объектов. В нашем случае имя элемента подменю будет состоять из двух частей: в качестве префикса используем надпись соответствующей кнопки верхнего меню, а в качестве суффикса - надпись на данной кнопке. Например,

Вот как это сделано у меня:
private function btn(namePrefix:String,item:XML,xx:uint,yy:uint):SimpleButton{ // создание кнопки с надписью
var caption:String = item.@name;
var tx:TextField = txt(caption,xx,yy);
var tx1:TextField = txt(caption,xx,yy);
tx1.borderColor = 0xFF0000;
var tx2:TextField = txt(caption,xx,yy);
tx2.borderColor = 0x00FF00;
tx1.width = tx2.width = Constants.MENUWIDTH
var bt3:Sprite = rect(0xDDDDDD,xx,yy);
var bt:SimpleButton = new SimpleButton(tx,tx1,tx2,bt3);
if(namePrefix){ // если префикс определен
bt.name = namePrefix + "." + caption;// Имена кнопок подменю содержат имя "родительской" кнопки в качесте префикса.
}else{
bt.name = caption;
}
var func:String = item.@func;
switch (func){ // Для некоторых кнопок обработчик события определяется из XML-файла
case("show"): bt.addEventListener(MouseEvent.CLICK,show); break;
default: bt.addEventListener(MouseEvent.CLICK,btClick);
}
return bt;
Прошу извинить меня за оплошность!


В избранное