PDA

Просмотр полной версии : Как правильно обращаться с экземплярами класса ?


yoman
19.04.2011, 18:30
Подскажите пожалуйста такую вещь :
1.Есть класс Box
2.В цикле создаем 5 экземпляров (5 квадратиков с разными координатами.)
3.На каждый экземпляр нужно повесить слушатель (ON_MOUSE_UP)
4.Ну и соответственно обрабатывать события для каждого конкретного экземпляра.

Я уже кучу книг перелопатил, но никак понять не могу как это сделать ПРАВИЛЬНО.

Если можно приведите какой нибудь очень простой пример, дальше сам разберусь.

samana
19.04.2011, 18:55
package
{
import flash.display.Sprite;
import flash.events.MouseEvent;

public class Box extends Sprite
{
public function Box()
{
graphics.beginFill(0x8AC5FF);
graphics.drawRect(0, 0, 20, 20);
graphics.endFill();
//.....................
addEventListener(MouseEvent.MOUSE_UP, mouse_up);
}
//------------------------------------------------------------------------------------
private function mouse_up(e:MouseEvent):void
{
trace("собитие mouse_up произошло над квадратом №",name)
}

}

}
package
{
import flash.display.Sprite;
import flash.events.Event;

public class Main extends Sprite
{
private var box:Box;

public function Main():void
{
for (var i:int = 0; i < 10; i++)
{
box = new Box();
box.x = 25 * i;
box.name = String(i);
addChild(box);
}
}

}

}

yoman
19.04.2011, 19:12
Спасибо вам добрый человек, принцип я понял, просто тупил отчаянно, но вот напрашивается сразу другой вопрос, а если класс BOX находится в SWC библиотеке, то как его расширить, что бы работало как в вашем примере ?

КорДум
19.04.2011, 19:13
Перепишу допишу пример samana
package {
import flash.display.Sprite;
import flash.events.Event;

public class Main extends Sprite {
private var box:Vector.<Box> = new Vector.<Box>();

public function Main():void {
for (var i:int = 0; i < 10; i++) {
var obj:Box = new Box();
obj.x = 25 * i;
addChild(obj);
obj.addEventListener(MouseEvent.CLICK, onClick);
box.push(obj);
}
}
}
}

Добавлено через 34 секунды
Создайте класс, расширенный от класса в SWC.

yoman
24.04.2011, 18:26
Перепишу допишу пример samana
package {
import flash.display.Sprite;
import flash.events.Event;

public class Main extends Sprite {
private var box:Vector.<Box> = new Vector.<Box>();

public function Main():void {
for (var i:int = 0; i < 10; i++) {
var obj:Box = new Box();
obj.x = 25 * i;
addChild(obj);
obj.addEventListener(MouseEvent.CLICK, onClick);
box.push(obj);
}
}
}
}

Добавлено через 34 секунды
Создайте класс, расширенный от класса в SWC.

Все здорово и все работает, только теперь непонятно, как сделать так, что бы я знал, какой конкретно экземпляр обрабатывает событие, как на этом примере, сделать так-же как в первом ???

fish_r
24.04.2011, 20:24
Понравилось вот это:


... Я уже кучу книг перелопатил...

:quiet:

Например, задать свой свойство "name" как в примере @samana:


box.name = String(i);


и за тем вычислять в обработчике по свойству target:



private function EventListener(e:MouseEvent):void
{
var nameBox:String = e.target.name;

}

yoman
24.04.2011, 20:32
Спасибо за ответ, я тут уже почти разобрался с ассоциативными массивами, и как раз прочитал в справочнике при target :)