Показать сообщение отдельно
Старый 03.10.2013, 12:12
KumoKairo вне форума Посмотреть профиль Отправить личное сообщение для KumoKairo Найти все сообщения от KumoKairo
  № 6  
Ответить с цитированием
KumoKairo
 
Аватар для KumoKairo

Регистрация: Jan 2013
Сообщений: 550
Записей в блоге: 1
Цитата:
Но дело в том, что ведь у некоторых объектов не будет текста. У спрайта же нет текста.
Поэтому и говорю:
Цитата:
Там надо проверять, является ли объект, на который навели мышь тем, что нам нужно или нет, а потом получать доступ к какому-нибудь свойству этого объекта, в котором хранится текст.
Цитата:
Вот только я не понимаю, почему когда я навожу мышку в пустоту - в инфопанели ничего не появляется?
Потому что белый фон - это не дисплей объект. Вешая на стейдж слушатель мышиных событий, они будут слушаться всеми детьми стейджа. Если на месте курсора нет ребенка - некому ловить событие. Попробуйте заменить пустой белый фон простым белым спрайтом на весь экран (ради интереса, на решение проблемы это никак не влияет)

Вам нужно сделать свой Sprite, в котором будет свойство .containedText, затем проверять, кто именно поймал событие, и если это наш Sprite с текстом - выводить в текстовое поле этот текст, а если любой другой объект - выводить сообщение "Это неправильный объект. И он делает неправильный текст":
Код AS3:
//Наш класс объекта с текстом
package
{
	import flash.display.Sprite;
 
	public class MyLittleSpriteWithText extends Sprite
	{
		public var containedText:String;
 
		public function MyLittleSpriteWithText(textToContain:String)
		{
			containedText = textToContain;
		}
	}
}
Код в Main (канву с вашего оригинала скопировал):
Код AS3:
	public class Main extends Sprite
	{
		...
		public function Main()
		{
			var myTextedSprite1:MyLittleSpriteWithText = new MyLittleSpriteWithText("ПИСЯ");
			addChild(myTextedSprite1);
 
			//--- Вешаем слушатель на стэйдж ---//
			stage.addEventListener(MouseEvent.MOUSE_OVER, showInfo);
		}
 
		private function showInfo(e:MouseEvent)
		{
			var currentTarget:MyLittleSpriteWithText = e.target as MyLittleSpriteWithText;
			if(currentTarget)
			{
				trace(currentTarget.containedText);
			}
			else
			{
				trace("Это неправильный объект. И он делает неправильный текст");
			}
		}
	}
Приведение (Название: pacmanGhost.jpeg
Просмотров: 340

Размер: 991 байт) с помощью оператора as позволит избавиться от рантайм ошибок приведения, но придется проверять конечную переменную на null. При неуспешном приведении переменной currentTarget присвоится null и условие if(currentTarget) не выполнится