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

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

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

Регистрация: Jun 2007
Адрес: Москва
Сообщений: 86
По умолчанию Передача параметров через кастом событие

Само событие выглядит так:
Код AS3:
package
{
    import flash.events.Event;
 
	public class SmartLoaderEvent extends Event
	{
                      public static const PROGRESS_UPDATE:String = "progress_update";
                      public var current:Number;
	           public var total:uint;
 
		public function SmartLoaderEvent(type:String) 
		{
                            super(type);
		} 
                       public override function toString():String 
                       { 
                            return formatToString("SmartLoaderEvent");
                       }
           }
}
Ну и как положено создаю экземпляр, записую в переменные что нужно и диспатчу.
Отлавливаю addEventListener(event:Event);
trace(event.total);
Пишет:
1119: Access of possibly undefined property total through a reference with static type flash.events:Event.

Корень проблемы ясен - приходит-то Event, а не мой кастом ивент(если вписать мое кастом событие тож ругается), но не доходит как реализовать и слышал, что есть решение. Какое?

Старый 13.07.2009, 03:30
udaaff вне форума Посмотреть профиль Отправить личное сообщение для udaaff Найти все сообщения от udaaff
  № 2  
Ответить с цитированием
udaaff
...

модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
addEventListener(event:Event) -- что это такое?
Цитата:
Ну и как положено создаю экземпляр, записую в переменные что нужно и диспатчу.
-- этот кусок кода можно увидеть?

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

Регистрация: Jun 2007
Адрес: Москва
Сообщений: 86
Да, кстати, target и currentTarget учитываю, просто это не по-джедайски.

Добавлено через 4 минуты
Конечно:
Код AS3:
import SmartLoaderEvent;
 
private var progress_event:SmartLoaderEvent = new  SmartLoaderEvent(SmartLoaderEvent.PROGRESS_UPDATE);
progress_event.current = 5.5444;
progress_event.total = 20;
dispatchEvent(progress_event);

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

Регистрация: Aug 2008
Адрес: 53 E
Сообщений: 60
Я что-то вобще не пойму Ваш класс пользовательского события.
Мы начинаем с чего при создании пользовательского события?
1. Расширяем класс Event (это Вы успешно выполнили)
2. Затем создаем статическую переменную в описании класса, в которую записываем строковое имя нашего пользовательского события (это Вы тоже сделали)
3. В метод конструктор, в качестве параметров передаем имя события, указываем является ли оно всплывающим, обладает ли стандартным поведением, и свои дополнительные параметры.
4. Далее в метод конструктор суперкласса, коим в данном случае является расширяемый нами класс Event, мы должны передать параметры метода конструктора нашего класса (опуская свои дополнительные параметры) - тут у Вас не понятно что передается и откуда берется.
5.Перекрытие метода toString - сплошная загадка его реализация в Вашем коде.
6. Где обязательное перекрытие метода clone ???

в общем код пользовательского события - нечитаем и достаточно удивителен.
p.s. но не удивительно, то, что ничего не работает!

Старый 13.07.2009, 12:29
silin вне форума Посмотреть профиль Посетить домашнюю страницу silin Найти все сообщения от silin
  № 5  
Ответить с цитированием
silin
 
Аватар для silin

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
>>Отлавливаю addEventListener(event:Event);

тебе нужно слушать SmartLoaderEvent, у которого есть эти total и current, а не Event, у которого их нет, о чем компилятор и сообщает

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

Регистрация: Jun 2007
Адрес: Москва
Сообщений: 86
Цитата:
тебе нужно слушать SmartLoaderEvent, у которого есть эти total и current, а не Event, у которого их нет, о чем компилятор и сообщает
- так и делаю, о чем и писал -
Цитата:
Корень проблемы ясен - приходит-то Event, а не мой кастом ивент(если вписать мое кастом событие тож ругается)
- то есть слушаю мой кастом ивент а флеш ошибку на 4 строки кидает.

Цитата:
5.Перекрытие метода toString - сплошная загадка его реализация в Вашем коде.
6. Где обязательное перекрытие метода clone ???
ЭТО не мой код! Я сам не понял загадку с toString. А теперь самое интересное. Этот код взят с Tips and Tricks ветки! http://flasher.ru/forum/showthread.php?t=79874

Добавлено через 57 минут
Кто уже решил эту проблему направьте на путь истиный.

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

Регистрация: Apr 2008
Адрес: Россия, Новосибирск, Академгородок
Сообщений: 355
Цитата:
Сообщение от SeaQuest Посмотреть сообщение
Ну и как положено создаю экземпляр, записую в переменные что нужно и диспатчу.
Отлавливаю addEventListener(event:Event);
trace(event.total);
Пишет:
1119: Access of possibly undefined property total through a reference with static type flash.events:Event.
Если хочешь увидеть свой total то сделай просто так

Код AS3:
trace((event as SmartLoaderEvent).total);
ты в функции получаешь через event ссылку на объект типа Event о чем тебе и сообщает компилятор. Хотя по сути объект является SmartLoaderEvent, но чтобы компилятор воспринимал его как таковой к нему нужно привести твой event
__________________
Хочу IQ как ICQ, ну или хотя бы ICQ как IQ


Последний раз редактировалось SunShadow; 13.07.2009 в 14:35.
Старый 13.07.2009, 15:14
SeaQuest вне форума Посмотреть профиль Отправить личное сообщение для SeaQuest Найти все сообщения от SeaQuest
  № 8  
Ответить с цитированием
SeaQuest
 
Аватар для SeaQuest

Регистрация: Jun 2007
Адрес: Москва
Сообщений: 86
SunShadow, спасибо!
Решили с коллегой этот вопрос. Оказуется кастом ивенту нужно обязательно создать функцию clone ибо событие приходит в виде клона кастома ивента. Соответственно, клон должен помнить параметры нашего ивента.
Вот рабочий класс кастом ивента:
Код AS3:
package
{
    import flash.events.Event;
 
	public class SmartLoaderEvent extends Event
	{
        public static const PROGRESS_UPDATE:String = "progress_update";
        public var current:Number;
		public var total:Number;
 
 
		public function SmartLoaderEvent(type:String, current_value = NaN, total_value = NaN, bubbles:Boolean=false, cancelable:Boolean=false) 
		{
             super(type, bubbles, cancelable);
			current = current_value;
			total = total_value;
		} 
 
		public override function clone():Event 
		{ 
			return new SmartLoaderEvent(type, current, total, bubbles, cancelable);
		} 
 
		public override function toString():String 
		{ 
			return formatToString("SmartLoaderEvent", "type", "bubbles", "cancelable", "eventPhase"); 
		}
 
		}
          }
}
листенер выглядит так:
Код AS3:
my_loader.addEventListener(SmartLoaderEvent.PROGRESS_UPDATE, progress_test_funct);
обработчик
Код AS3:
private function progress_test_funct(event:SmartLoaderEvent)
{
	trace("ПАРАМЕТРЫ" ,event.total, event.current);
}
Тема исчерпана.

Старый 14.07.2009, 13:44
AlexStukoff вне форума Посмотреть профиль Отправить личное сообщение для AlexStukoff Посетить домашнюю страницу AlexStukoff Найти все сообщения от AlexStukoff
  № 9  
Ответить с цитированием
AlexStukoff
 
Аватар для AlexStukoff

Регистрация: Dec 2007
Адрес: Stavropol
Сообщений: 65
Отправить сообщение для AlexStukoff с помощью ICQ
Как приятно, что автор ветки не ограничился "Всем спасибо, проблема решена" а привел рабочий код!
Помогло, спасибо
__________________
coming soon...

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

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

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


 


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


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