Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему  
Старый 04.10.2013, 00:58
Fogflasher вне форума Посмотреть профиль Отправить личное сообщение для Fogflasher Найти все сообщения от Fogflasher
  № 19  
Ответить с цитированием
Fogflasher

Регистрация: Mar 2013
Сообщений: 290
KumoKairo, Похоже, я нашел способ как проще применить вашу идею, без введения Sprite субкласса, используя только свойство .name объектов. Хотя, он наверное более избыточен, но как именно применить ваш способ к группе экземпляров разных классов, я не сообразил.

AlexCooper, к сожалению, мое понимание того, что такое интерфейсы и как они работают, еще не превышает наверное и 10% от полного.
Поэтому, я не знаю как адаптировать вашу идею к данному примеру.

Короче говоря, получилось так. Основной документ класс:

Код AS3:
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 = "...";
		}
 
 
 
 
	}
 
 
 
}
Ну и класс, который размещает все объекты, кроме панели, такой:
Код AS3:
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);
 
		}
 
 
	}
 
}
Выглядит так:
Main.swf   (4.4 Кб)


Видимо, такой подход кривоват, а идея со switch, наверное, весьма избыточна.
Также остаются некоторые слабо прояснённые моменты:

- Непонятно, как работать с безспрайтными Шейпами.
Если я присваиваю такому шейпу свойство .name то оно не проявляется, и все-равно он автоматом получает instanceN.

- Непонятно, как выцеплять пустоту : ) Пришлось обойтись отдельным событием MOUSE_OUT.

- Лучше ли применять события ROLL_OVER и ROLL_OUT в сравнении с MOUSE_OVER и MOUSE_OUT.
Вложения
Тип файла: swf Main.swf (4.4 Кб, 53 просмотров)

Создать новую тему   Часовой пояс GMT +4, время: 19:24.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 19:24.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.