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

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

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

Регистрация: May 2012
Сообщений: 5
По умолчанию Как пользоваться event.target

Всем привет.
Задача элементарная. Создаем ряд графических объектов. Кликаем по ним мышью - функция слушатель должна возвращать имя графического объекта.
Моя реализация
Код AS3:
package towns
{
	import flash.display.*;
	import flash.events.MouseEvent;
	public class Game extends Sprite
	{			
 
		private var checkedTown:String;                                                                      
		public function Game()
		{			
                        var circle:Sprite=new Sprite();
			circle.graphics.lineStyle(1);
			circle.graphics.beginFill(989898,1);
			circle.graphics.drawCircle(200,100,10);
			addChild(circle);
			addEventListener(MouseEvent.CLICK, mouseUpListener);
		}
		private function mouseUpListener(e:MouseEvent){			
			trace (e.target)			
		}
	}
}
Так вот, e.target выдает не circle, как я ожидал, а [object Sprite].
Подскажите, как быть?
Кстати нигде не нашел толкового руководства по этому вопросу. То есть описание всех методов e.target

Старый 13.05.2012, 11:31
Silicium вне форума Посмотреть профиль Отправить личное сообщение для Silicium Найти все сообщения от Silicium
  № 2  
Ответить с цитированием
Silicium
 
Аватар для Silicium

Регистрация: Sep 2010
Адрес: Ростов-на-Дону
Сообщений: 369
Что значит "возвращать имя"? Какое имя? Где это имя хранится?

Старый 13.05.2012, 11:54
ashIndie вне форума Посмотреть профиль Отправить личное сообщение для ashIndie Найти все сообщения от ashIndie
  № 3  
Ответить с цитированием
ashIndie

Регистрация: Feb 2012
Сообщений: 68
есть 2 свойства:
e.target и e.currentTarget
e.currentTarget выдает ссылку непосредственно на "получатель события" (обьект, события которого вы слушаете).
e.target выдает ссылку на обьект, на который вы непосредственно нажали (при MouseEvent).
допустим есть мувик mc, в нем лежит мувик mcIn, тогда при срабатывании события:
Код AS3:
trace(e.target.name); //выдаст 'mcIn'
trace(e.currentTarget.name); //выдаст 'mc'
как понятно из кода, написанного выше, при диспетчиризации событий отправляется событийный обьект (обьект MouseEvent), вам надо обращаться к свойству e.target.name(или e.currentTarget.name) в "приемнике событий"(функции, выполняющейся при возникновении событий), чтобы получить имя получателя события.

Старый 13.05.2012, 12:12
ArtemiusII вне форума Посмотреть профиль Отправить личное сообщение для ArtemiusII Найти все сообщения от ArtemiusII
  № 4  
Ответить с цитированием
ArtemiusII

Регистрация: May 2012
Сообщений: 5
Я добавляю на stage circle1, circle2, circle3 и т.д.
Сейчас у меня в программе только circle.
Хоть e.target хоть e.currentTarget выдаст не circle1 (circle2, circle3 и т.д.) ,
а [object Sprite], [object Sprite], [object Sprite].
e.target.name(или e.currentTarget.name) выводит instance1.
Как я понимаю instance1 - это глубина в списке отображения.

Старый 13.05.2012, 12:35
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 5  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Цитата:
Как я понимаю instance1 - это глубина в списке отображения.
Нет. Это имя экземпляра, присвоенное ему автоматически.
Цитата:
Хоть e.target хоть e.currentTarget выдаст не circle1
Ну а с чего бы им выдавать имя переменной, в которой хранится ссылка на объект? Источником события является объект, а не переменная. И на этот объект может ссылаться тысяча переменных — какую из них Вам "показывать"?
__________________
Reality.getBounds(this);

Старый 13.05.2012, 13:49
ArtemiusII вне форума Посмотреть профиль Отправить личное сообщение для ArtemiusII Найти все сообщения от ArtemiusII
  № 6  
Ответить с цитированием
ArtemiusII

Регистрация: May 2012
Сообщений: 5
Ок.
Допустим у нас есть , например прямоугольник, цвет заливки которого задается переменной
Код:
color
.
Цвет будет выбираться путем нажатия на соответствующий кружок.
Я могу воспользоваться таким кодом функции приемника?
Код AS3:
public function mouseUpListener( event:MouseEvent ):void { 
var color:uint; 
switch ( event.target ) { 
case circle1: color = OxFFOOOO; break; 
case circle2: color = OxOOFFOO; break; 
case circle3: color = OxOOOOFF; break; 
}
}

Старый 13.05.2012, 16:52
XoJlToH вне форума Посмотреть профиль Отправить личное сообщение для XoJlToH Найти все сообщения от XoJlToH
  № 7  
Ответить с цитированием
XoJlToH
 
Аватар для XoJlToH

Регистрация: Sep 2006
Сообщений: 145
задать инстанс неймы не судьба?
Код AS3:
circle1.name="circle1"

Старый 13.05.2012, 20:06
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 8  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Цитата:
Я могу воспользоваться таким кодом функции приемника?
А зачем Вы спрашиваете? Самому проверить не быстрее?
В конкретике вопрос лишен смысла — кто знает, что у Вас там нажимается и на какие объекты вешался слушатель. Может, target, а может и currentTarget. Сам принцип — да, один из возможных. Другой — иметь у "кнопок" какой-то идентификатор, например тот же name, и проверять по нему. Или хранить значения для color прямо в кнопках и брать их оттуда напрямую в хендлере, без батареи свитчей. Или хранить цвета в справочнике, привязанными к ключам-кнопкам. Разные способы есть.
__________________
Reality.getBounds(this);

Старый 13.05.2012, 22:39
ArtemiusII вне форума Посмотреть профиль Отправить личное сообщение для ArtemiusII Найти все сообщения от ArtemiusII
  № 9  
Ответить с цитированием
ArtemiusII

Регистрация: May 2012
Сообщений: 5
Всем спасибо. Проверил. Инстанс Нейм мне подошел, мой код подошел.
Остался один вопрос. Где же все-таки прочитать о всех методах e.target.
В справке Адоба какие-то куцые сведения.

Старый 13.05.2012, 23:13
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 10  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Никто не ответит, потому что у e.target нет никаких методов. Это просто свойство, указывающее на экземпляр, класс которого не указан в самом типе свойства, то есть неизвестен до факта инициализации свойства. Нет класса — нет методов. Сформулируйте вопрос иначе, может, "своими словами", как говорили в советской школе)) Что Вас интересует?
__________________
Reality.getBounds(this);

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

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

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


 


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


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