Просмотр полной версии : Как правильно обращаться с экземплярами класса ?
Подскажите пожалуйста такую вещь :
1.Есть класс Box
2.В цикле создаем 5 экземпляров (5 квадратиков с разными координатами.)
3.На каждый экземпляр нужно повесить слушатель (ON_MOUSE_UP)
4.Ну и соответственно обрабатывать события для каждого конкретного экземпляра.
Я уже кучу книг перелопатил, но никак понять не могу как это сделать ПРАВИЛЬНО.
Если можно приведите какой нибудь очень простой пример, дальше сам разберусь.
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);
}
}
}
}
Спасибо вам добрый человек, принцип я понял, просто тупил отчаянно, но вот напрашивается сразу другой вопрос, а если класс BOX находится в SWC библиотеке, то как его расширить, что бы работало как в вашем примере ?
Перепишу допишу пример 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.
Перепишу допишу пример 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.
Все здорово и все работает, только теперь непонятно, как сделать так, что бы я знал, какой конкретно экземпляр обрабатывает событие, как на этом примере, сделать так-же как в первом ???
Понравилось вот это:
... Я уже кучу книг перелопатил...
:quiet:
Например, задать свой свойство "name" как в примере @samana:
box.name = String(i);
и за тем вычислять в обработчике по свойству target:
private function EventListener(e:MouseEvent):void
{
var nameBox:String = e.target.name;
}
Спасибо за ответ, я тут уже почти разобрался с ассоциативными массивами, и как раз прочитал в справочнике при target :)
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.