PDA

Просмотр полной версии : Обработка с помощью массива


mAK08
10.06.2013, 14:05
Здравствуйте! B5.addEventListener(MouseEvent.CLICK,onClickHandler);
B4.addEventListener(MouseEvent.CLICK,onClickHandler);
B3.addEventListener(MouseEvent.CLICK,onClickHandler);
B2.addEventListener(MouseEvent.CLICK,onClickHandler);
B1.addEventListener(MouseEvent.CLICK,onClickHandler);
B6.addEventListener(MouseEvent.CLICK,onClickHandler);
Вот у меня столько кнопок, и хотелось бы через массив я думаю было бы удобнее... Но что то не то, я пробовал вот так.
private function addEvents():void
{
for (var i:int=1; i<ButtonNumber; i++)
{
var btn:R_697 = new R_697();
btn.name = "B" + i;
btn.addEventListener(MouseEvent.CLICK,onClickHandler);
}
}

Но так он ругается!

Вообще очень хотел бы научиться обрабатывать с помощью массивов, где есть об этом информация? если кто знает очень был бы благодарен! и Про функции и параметры тоже!

Добавлено через 12 минут
Тоесть не так выразился, хотелось бы через массив добавить слушателей для кнопок которые уже на сцене

Ёлочка
10.06.2013, 14:19
А почему индекс начинается с 1? У массивов первый индекс 0.

MikroAcse
10.06.2013, 14:39
var buttons:Array = [];

for(var i:int = 0; i<ButtonNumber; i++) {
var button:R_697 = new R_697();
button.name = "b" + i;
button.addEventListener(MouseEvent.CLICK,onClickHandler);
buttons.push(button);
}

trace(buttons);

mAK08
11.06.2013, 14:53
Ваш Вариант пробовал но не хочет ругается на строчку
var button:R_697 = new R_697();
изменил на
var buttons:Array = [];

for(var i:int = 0; i<ButtonNumber; i++) {
var button:SimpleButton = new SimpleButton();
button.name = "b" + i;
button.addEventListener(MouseEvent.CLICK,onClickHandler);
buttons.push(button);
}

trace(buttons);
Компилируется но кнопки не реагируют...

попытался вот таким вариантом
private function initialButtonsMain():void // Buttons on Main Scene
{
for (var i:int = 1; i<BUTTONS_VALUE; i++)
{
var button:SimpleButton = this.getChildByName("B" + i) as SimpleButton;
button.addEventListener(MouseEvent.CLICK, onClickHandler);
buttonsA.push(button);
}
updateListeners(true);
}

private function updateListeners(param:Boolean):void // Check for Bool Parameter
{
for (var i:int = 1; i<buttonsA.length; i++)
{
var button:SimpleButton = buttonsA[i] as SimpleButton;
if (param)
{
button.addEventListener(MouseEvent.CLICK, onClickHandler);
}
else
{
button.removeEventListener(MouseEvent.CLICK, onClickHandler);
}

}

}

Но говорит Error #1009: Не удается вызвать свойство или метод со ссылкой на объект "null".

Можно ли как нибудь еще? или как исправить такую ошибку. Просто очень хочется обрабатывать с помощью массивов потому что когда кнопок 10 то каждый раз одно и то же писать как то некрасиво...

Добавлено через 3 минуты
вот весь код класса
package basis
{
import flash.events.MouseEvent;
import flash.events.Event;
import flash.display.SimpleButton;
import flash.display.MovieClip;
import com.greensock.*;
import com.greensock.easing.*;



public class Main_697 extends MovieClip
{

private const BUTTONS_VALUE:int = 4;
private var buttonsA:Array = [];
private var mc_1:MC_1;
private var mc_2:MC_2;
private var mc_3:MC_3;

public function Main_697()
{
addEventListener(Event.ADDED_TO_STAGE, initialMain);

initialButtonsMain();// add Listeners for Buttons: if true = add, false = remove;

mc_1 = new MC_1;
mc_2 = new MC_2;
mc_3 = new MC_3;
}

private function initialMain(e:Event):void
{
removeEventListener(Event.ADDED_TO_STAGE, initialMain);

importObjectToMainScene(mc_1);

}

private function initialButtonsMain():void // Buttons on Main Scene
{
for (var i:int = 1; i<BUTTONS_VALUE; i++)
{
var button:SimpleButton = this.getChildByName("B" + i) as SimpleButton;
buttonsA.push(button);
}
updateListeners(true);
}

private function updateListeners(param:Boolean):void // Check for Bool Parameter
{
for (var i:int = 1; i<buttonsA.length; i++)
{
var button:SimpleButton = buttonsA[i] as SimpleButton;
if (param)
{
button.addEventListener(MouseEvent.CLICK, onClickHandler);
}
else
{
button.removeEventListener(MouseEvent.CLICK, onClickHandler);
}

}

}

private function onClickHandler (e:MouseEvent):void // Choose right Movie Clip
{
switch(e.currentTarget.name)
{
case 'B1':
removeObjectFromMainScene();
importObjectToMainScene(mc_1);
break;

case 'B2':
removeObjectFromMainScene();
importObjectToMainScene(mc_2);

}
}


private function importObjectToMainScene( displayedObject:MovieClip ):void // Import MovieClip To Main Scene
{
displayedObject.x = 88;
displayedObject.y = 88;

addChild(displayedObject);
}

private function removeObjectFromMainScene():void // Remove all Childs except Movie Clip on First Level
{
while (this.numChildren > 0)
{
this.removeChildAt(0);
}
}



}

}

GBee
11.06.2013, 15:32
Подпишитесь слушать контейнер этих кнопок и по target ловите.

mAK08
11.06.2013, 15:34
Непонял, как это подпишитесь слушать контейнер кнопок. Какой контейнер?

MikroAcse
11.06.2013, 16:03
for (var i:int = 1; i<buttonsA.length; i++)
for (var i:int = 1; i<BUTTONS_VALUE; i++)
Запомните: первый индекс массива = 0.
Правильно так:
for (var i:int = 0; i<buttonsA.length; i++)
for (var i:int = 0; i<BUTTONS_VALUE; i++)

mAK08
11.06.2013, 16:08
знаю, но мне нужно с 1 начинать что бы кнопки ровно попадали первая кнопка 1 вторая 2 и т д а не первая кнопка 0 и т д... А какая разница хоть с 10 начинать...

GBee
11.06.2013, 16:36
Не понял, как это подпишитесь слушать контейнер кнопок. Какой контейнер?
Вы добавляете кнопки в какой-то визуальный объект. Подписаться можно на него. И в самом обработчике смотреть target и имя target'a. При щелчке по любой из кнопок событие проходит по всей ветке визуального дерева до кнопки, а потом "всплывает" обратно (не люблю это описание).

MikroAcse
11.06.2013, 21:04
for (var i:int = 1; i<BUTTONS_VALUE; i++)
{
var button:SimpleButton = this.getChildByName("B" + i) as SimpleButton;
buttonsA.push(button);
button.mouseChildren = false;
}