Просмотр полной версии : Обработка с помощью массива
Здравствуйте! 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 минут
Тоесть не так выразился, хотелось бы через массив добавить слушателей для кнопок которые уже на сцене
А почему индекс начинается с 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);
Ваш Вариант пробовал но не хочет ругается на строчку
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);
}
}
}
}
Подпишитесь слушать контейнер этих кнопок и по target ловите.
Непонял, как это подпишитесь слушать контейнер кнопок. Какой контейнер?
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++)
знаю, но мне нужно с 1 начинать что бы кнопки ровно попадали первая кнопка 1 вторая 2 и т д а не первая кнопка 0 и т д... А какая разница хоть с 10 начинать...
Не понял, как это подпишитесь слушать контейнер кнопок. Какой контейнер?
Вы добавляете кнопки в какой-то визуальный объект. Подписаться можно на него. И в самом обработчике смотреть 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;
}
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.