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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 07.02.2011, 01:25
passertm вне форума Посмотреть профиль Отправить личное сообщение для passertm Найти все сообщения от passertm
  № 1  
Ответить с цитированием
passertm
[+1 28.12.10]
[+1 29.12.10]
 
Аватар для passertm

Регистрация: Aug 2006
Сообщений: 107
По умолчанию не приводится к типу

Здравствуйте.

Странную вещь заметил. Вроде даже решил. Но не понятно действительно ли так должно быть. И так

Есть событие
Код AS3:
	public class IPEvent extends Event {
		public var obj:Object;
		public static var onIPEvent:String = "IPEvent_txt";
 
		public function IPEvent(newobj:Object = null) {
			super(onIPEvent);
			obj = newobj;
		}
	}


И есть три класса. В первом классе вызывается
Код AS3:
dispatchEvent(new IPEvent(item.source));
Во втором классе
Код AS3:
someobj.addEventListener(IPEvent.onIPEvent, taskEventHappen);
public function taskEventHappen(e:IPEvent) {
..............
	if (.......) {
		dispatchEvent(e);
	}
}
Ну и третий класс.
Код AS3:
exp.addEventListener(IPEvent.onIPEvent, onIPEventAction);
public function onIPEventAction(event1:Event) {
	trace("onIPEventAction " + event1);
 
	var event:IPEvent=IPEvent(event1);
}
и вот на последней строчке выходит ошибка

taskEventHappen [Event type="IPEvent_txt" bubbles=false cancelable=false eventPhase=2]
onIPEventAction [Event type="IPEvent_txt" bubbles=false cancelable=false eventPhase=2]
TypeError: Error #1034: Type Coercion failed: cannot convert flash.events::Event@f4fde21 to iconpane.IPEvent.



Подскажите что я делаю не правильно?
Зачем приходится пересоздавать события?


Последний раз редактировалось passertm; 07.02.2011 в 15:17.
Старый 07.02.2011, 01:37
i.o. вне форума Посмотреть профиль Отправить личное сообщение для i.o. Найти все сообщения от i.o.
  № 2  
Ответить с цитированием
i.o.
 
Аватар для i.o.

Регистрация: Apr 2010
Адрес: Earth
Сообщений: 1,897
Event не имплементит ваш IPEvent интерфейс. Да и не приводите вы, а конвертируете.

Старый 07.02.2011, 10:01
passertm вне форума Посмотреть профиль Отправить личное сообщение для passertm Найти все сообщения от passertm
  № 3  
Ответить с цитированием
passertm
[+1 28.12.10]
[+1 29.12.10]
 
Аватар для passertm

Регистрация: Aug 2006
Сообщений: 107
Цитата:
Сообщение от i.o. Посмотреть сообщение
Event не имплементит ваш IPEvent интерфейс.
а почему если dispatchEvent вызывался с обьектом класса IPEvent?

Цитата:
Сообщение от i.o. Посмотреть сообщение
Да и не приводите вы, а конвертируете.
вы уверены? что то я сильно сомневаюсь...

Старый 07.02.2011, 10:06
i.o. вне форума Посмотреть профиль Отправить личное сообщение для i.o. Найти все сообщения от i.o.
  № 4  
Ответить с цитированием
i.o.
 
Аватар для i.o.

Регистрация: Apr 2010
Адрес: Earth
Сообщений: 1,897
Цитата:
TypeError: Error #1034: Type Coercion failed: cannot convert flash.events::Event@f4fde21 to iconpane.IPEvent.
В тексте ошибки четко сказано, что он не может привести flash.events::Event к вашему интерфейсу.
Я без понятия откуда там берется обычный Event, весь код вы не привели.
Цитата:
вы уверены?
да, уверен. Плеер не без мозгов все же, поэтому в случае неудачной конвертации попытается выполнить приведение, как в данном случае.
Вообще приводят типы с помощью оператора "as".

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

блогер
Регистрация: Mar 2007
Сообщений: 1,291
Записей в блоге: 5
Отправить сообщение для cleptoman с помощью ICQ
event1 as IPEvent
Event#bubbles

возможно, что-то из этого вам поможет )
__________________
http://cleptoman.free-lance.ru
achivements: дважды благословлен на воровство. осеяный благодатью

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

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,740
Записей в блоге: 11
Во второй класс вам приходит IPEvent. Что вы потом диспатчите из него?
Цитата:
if (.......) {
dispatchEvent(e);
}

Старый 07.02.2011, 14:28
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 7  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,784
Не описан clone().

Старый 07.02.2011, 15:38
passertm вне форума Посмотреть профиль Отправить личное сообщение для passertm Найти все сообщения от passertm
  № 8  
Ответить с цитированием
passertm
[+1 28.12.10]
[+1 29.12.10]
 
Аватар для passertm

Регистрация: Aug 2006
Сообщений: 107
Цитата:
Сообщение от alatar Посмотреть сообщение
Во второй класс вам приходит IPEvent. Что вы потом диспатчите из него?
ой. Извиняюсь. видимо случайно задел когда убирал не нужный код.

Цитата:
Сообщение от i.o. Посмотреть сообщение
Я без понятия откуда там берется обычный Event, весь код вы не привели.
Так там больше ниего и нету что могло бы на это повлиять.

Цитата:
Сообщение от i.o. Посмотреть сообщение
В тексте ошибки четко сказано, что он не может привести flash.events::Event к вашему интерфейсу.
да, уверен. Плеер не без мозгов все же, поэтому в случае неудачной конвертации попытается выполнить приведение, как в данном случае.
На сколько я понимаю сначало делается попытка привезти к типу.
В случае когда это оканчивается неудачой делается попытка конвертацииодного класса в другой при помоши стандартных функций(на пример toString()). Поэтому ипишется в сообшении что не удается конвертировать. Хотя если бы передавался действительно IPEvent никаких проблем не возникало и нормально приводилось(!) бы к типу. Хотя возможно я ошибаюсь.


Цитата:
Сообщение от etc Посмотреть сообщение
Не описан clone().
Вы действительно правы. Я не сразу понял в чем дело.
Так как я не клонирую данный обьект и не реализую клонирование для данного класса это делает за меня dispatchEvent. он использует функцию clone() описанную в Event, которая возврашает Event. Вот откуда появляется обьект event.

Спасибо за подсказку. и потраченное время.

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

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

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


 


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


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