![]() |
|
||||||||||
|
|||||
|
Регистрация: Mar 2013
Сообщений: 290
|
KumoKairo, Похоже, я нашел способ как проще применить вашу идею, без введения Sprite субкласса, используя только свойство .name объектов. Хотя, он наверное более избыточен, но как именно применить ваш способ к группе экземпляров разных классов, я не сообразил.
AlexCooper, к сожалению, мое понимание того, что такое интерфейсы и как они работают, еще не превышает наверное и 10% от полного. Поэтому, я не знаю как адаптировать вашу идею к данному примеру. Короче говоря, получилось так. Основной документ класс: package { import flash.display.*; import flash.events.*; import flash.text.*; public class Main extends Sprite { //--- Экземпляр класса инфо-панели ---// private var _panelPlacer:Panel_placer; //--- Экземпляр класса добавляемых объектов ---// private var _objectPlacer:Object_placer; public function Main() { _objectPlacer = new Object_placer(); addChild(_objectPlacer); _panelPlacer = new Panel_placer(); addChild(_panelPlacer); //--- Вешаем слушатели на стэйдж ---// stage.addEventListener(MouseEvent.MOUSE_OVER, showInfo); stage.addEventListener(MouseEvent.MOUSE_OUT, resetInfo); } private function showInfo(e:MouseEvent) { trace("Класс: ", String(e.target), "; Экземпляр = ", String(e.target.name)); switch(String(e.target)) { case "[object TextField]" : if(String(e.target.name) == "info_texter") { _panelPlacer._infoPanel.info_texter.text = "Инфо-область"; } else { _panelPlacer._infoPanel.info_texter.text = "Текст: " + String(e.target.name); } break; case "[object Sprite]" : _panelPlacer._infoPanel.info_texter.text = "Квадрат: " + String(e.target.name); break; case "[object Info_panel]" : _panelPlacer._infoPanel.info_texter.text = "Панель: " + String(e.target.name); break; case "[object Circle]" : _panelPlacer._infoPanel.info_texter.text = "Эллипс: " + String(e.target.name); break; case "[object Object_placer]" : _panelPlacer._infoPanel.info_texter.text = "Шэйп: " + String(e.target.name) + " без спрайта"; break; } } private function resetInfo(e:MouseEvent) { _panelPlacer._infoPanel.info_texter.text = "..."; } } } package { import flash.display.*; import flash.events.*; import flash.text.*; public class Object_placer extends Sprite { public var _objectPlacer:Object_placer; //--- Произвольные объекты на экране ---// private var _someTextfield:TextField; private var _someSquare:Shape; private var _someTriangle:Shape; private var _shapeSprite:Sprite; private var _someCircle:Circle; public function Object_placer() { //--- Размещаем текстфилд ---// _someTextfield = new TextField(); _someTextfield.text = "<<< НАВЕДИ КУРСОР НА ОБЪЕКТ >>>"; _someTextfield.autoSize = TextFieldAutoSize.LEFT; _someTextfield.background = true, _someTextfield.backgroundColor = 0xFFCC00; _someTextfield.border = true, _someTextfield.borderColor = 0xFF9900; _someTextfield.x = 200, _someTextfield.y = 50; _someTextfield.name = "гласящий " + _someTextfield.text; addChild(_someTextfield); //--- Размещаем спрайт квадрата ---// _someSquare = new Shape(); _shapeSprite = new Sprite(); _shapeSprite.x = 280, _shapeSprite.y = 200; _someSquare.graphics.lineStyle(1); _someSquare.graphics.beginFill(0x00CCFF, 1); _someSquare.graphics.drawRect(0, 0, 75, 50); _shapeSprite.addChild(_someSquare); _shapeSprite.name = "Голубой такой"; addChild(_shapeSprite); //--- Размещаем шейп треугольника ---// _someTriangle = new Shape( ); _someTriangle.graphics.lineStyle(1); _someTriangle.graphics.moveTo(100, 200); _someTriangle.graphics.beginFill(0xFF00CC, 1); _someTriangle.graphics.lineTo(200, 200); _someTriangle.graphics.lineTo(150, 250); _someTriangle.graphics.lineTo(100, 200); _someTriangle.graphics.endFill( ); _someTriangle.name = "Фиолетовый"; addChild(_someTriangle); //--- Размещаем круг ---// _someCircle = new Circle(); _someCircle.x = 450, _someCircle.y = 200; _someCircle.name = "Желтый, из Library"; addChild(_someCircle); } } } Видимо, такой подход кривоват, а идея со switch, наверное, весьма избыточна. Также остаются некоторые слабо прояснённые моменты: - Непонятно, как работать с безспрайтными Шейпами. Если я присваиваю такому шейпу свойство .name то оно не проявляется, и все-равно он автоматом получает instanceN. - Непонятно, как выцеплять пустоту : ) Пришлось обойтись отдельным событием MOUSE_OUT. - Лучше ли применять события ROLL_OVER и ROLL_OUT в сравнении с MOUSE_OVER и MOUSE_OUT. |
![]() |
Часовой пояс GMT +4, время: 19:24. |
|
|
« Предыдущая тема | Следующая тема » |
|
|