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

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

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

Регистрация: Oct 2009
Сообщений: 12
По умолчанию Неколько простых вопросов по Event.

Доброго времени суток. В AC3 я совсем нуб.

Подскажите как мне отловить событие скрытие элемента типа MovieClip - то есть visible = false через addEventListener. Как устанавливать прослушиватель я разобрался, но вот на какое событие вешать выполнение функции не могу найти.

И еще подскажите как в выполняемую функцию передавать кроме Event собственные параметры (переменные). Желательно просто кусов кода с addEventListener.

И еще.
Насчет собственных эвентов. Есть MovieClip с именем mp1, на 60 фрейме прописываю:

this.dispatchEvent(new Event("myAlertEvent"));

В первом фрейме Scene1 ставлю прослушку кодом:
this.mp1.addEventListener("myAlertEvent , f_AlertFunc);

Событие не срабатывает, думаю все несколько сложнее. Помогите начинающему, можно ссылками на мануалы или примером кода.

Заранее огромное спасибо.

Старый 15.10.2009, 13:00
Gal4enochek вне форума Посмотреть профиль Отправить личное сообщение для Gal4enochek Найти все сообщения от Gal4enochek
  № 2  
Ответить с цитированием
Gal4enochek

Регистрация: May 2008
Адрес: Днепропетровск
Сообщений: 151
Отправить сообщение для Gal4enochek с помощью ICQ
Цитата:
как мне отловить событие скрытие элемента типа MovieClip - то есть visible = false через addEventListener. Как устанавливать прослушиватель я разобрался, но вот на какое событие вешать выполнение функции не могу найти.
Не знаю, моет то не самый простой способ, но например так:
1) Для клипа, который должен оповещать у своем скрытии, написать класс унаследованнй от MovieClip.
2) В нем переопределить set visible и рассылать свое собственное событие
Код AS3:
public override function set visible(value:Boolean):void{
	super.visible = value;
	if (value) dispatchEvent(new Event("SHOW"))
	else dispatchEvent(new Event("HIDE"))
}
3) где необходимо подписаться на ваши события этого мувика

Добавлено через 6 минут
Цитата:
как в выполняемую функцию передавать кроме Event собственные параметры
- написать собственнй класс события унаследованный от Event, который будет иметь еще одно поле с данными

Чо каксается вашего примера, то у меня все работает. может вы что-то не правильно описали?

Старый 15.10.2009, 13:47
niil вне форума Посмотреть профиль Отправить личное сообщение для niil Найти все сообщения от niil
  № 3  
Ответить с цитированием
niil

Регистрация: Oct 2009
Сообщений: 12
Разобрался с dispatchEvent и с событием скрытия MovieClip через все тот же dispatchEvent.

- написать собственнй класс события унаследованный от Event, который будет иметь еще одно поле с данными

Можно поподробнее как создавать наследников класса в AC3 и потом работать с ними

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

Регистрация: May 2008
Адрес: Днепропетровск
Сообщений: 151
Отправить сообщение для Gal4enochek с помощью ICQ
Код AS3:
import flash.events.Event;
 
	public class CustomEvent extends Event
	{	
		public static const		SOMETHING_HAPPEND	: String = "some";
 
		private var _data						: Object;	
 
		public function CustomEvent(type:String, data:Object=null, bubbles:Boolean=false, cancelable:Boolean=false)
		{
			super(type, bubbles, cancelable);
			_data = data;
		}
 
		public function get data():Object{
			return _data;
		}
 
	}
ну где-то там отсылайе событие
Код AS3:
 object.dispatchEvent(new CustomEvent(CustomEvent.SOMETHING_HAPPEND, {message :"hi", value:5}));
вешаете листнер на ваше событие
а в листенере так будет
Код AS3:
function myEventHandler(event :CustomEvent):void{
  trace(event.data.message);
  trace(event.data.value);
}
в общем как-то так
Почитайте про пользовательские события.

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

Регистрация: Oct 2009
Сообщений: 12
Про пользовательские события я уже разобрался, но все равно огромное спасибо. Сейчас более интресует возможность отсылать в функцию вызываемую addEventListener
при событии "complete" в объекте типа URLLoader кроме стандартного Event, собственные переменные.
Поясню. Есть URLLoader загружающий в цикле картинки в определенные MovieClipы (Pan_1, Pan_2, Pan_3, Pan_"Type1", где переменная Type1 берется из mysql базы). На данный момент он не работает - картинки не выводятся на MovieClip.

Код AS3:
  for (var j = 1; j < RecArr.length; j++){
  var CurF:Array = RecArr[j].split("%|%");
  var Type1:String = CurF[0].toString();
  var Type1:String = CurF[1].toString();  
  Pan = getChildByName('Pan_' + Type1); 
  var ImgLoader:Loader = new Loader();
  var UrlRequest:URLRequest = new URLRequest('/menu/mi_' + Type1 + '_' + Type2 + '.png');
  ImgLoader.load(UrlRequest);
  ImgLoader.addEventListener(Event.COMPLETE, f_ILoad); //- вот сюда надо бы еще отпрвлять ссылку на объект Pan
}
Далее обрабатываю получение картинки (не отлвливаю ошибки несуществования картинки, будем считать, что они точно существуют)

Код AS3:
function f_ILoad(e:Event){ //- сюда должна также приходить ссылка на объект вставки DestPan
   var Image: Bitmap = (Bitmap)(e.target.content); // создаем контейнер типа Bitmap, возможно в данном случае нужен другой, т.к. формат картинки PNG
   Image.x = 20;
   Image.y = 40;
   //DestPan.addChild(Image);		
}
Если несложно подкорректируйте код! Зранее спасибо!


Последний раз редактировалось niil; 15.10.2009 в 15:22.
Старый 15.10.2009, 15:11
Gal4enochek вне форума Посмотреть профиль Отправить личное сообщение для Gal4enochek Найти все сообщения от Gal4enochek
  № 6  
Ответить с цитированием
Gal4enochek

Регистрация: May 2008
Адрес: Днепропетровск
Сообщений: 151
Отправить сообщение для Gal4enochek с помощью ICQ
Оформите код тегами AS3

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

Регистрация: Oct 2009
Сообщений: 12
Цитата:
Сообщение от Gal4enochek Посмотреть сообщение
Оформите код тегами AS3
Сделал.


Последний раз редактировалось niil; 15.10.2009 в 15:22.
Старый 15.10.2009, 15:37
Gal4enochek вне форума Посмотреть профиль Отправить личное сообщение для Gal4enochek Найти все сообщения от Gal4enochek
  № 8  
Ответить с цитированием
Gal4enochek

Регистрация: May 2008
Адрес: Днепропетровск
Сообщений: 151
Отправить сообщение для Gal4enochek с помощью ICQ
Ну как вариант:
написать свой класс MyLoader наследник от Loader, который будет делать то же самое, только будет иметь дополнительное поле dest_clip - клип,в который аттачится картинка будет. Тогда в листенере можно будет его достать как
Код AS3:
(e.target as MyLoader).dest_clip
Если есть другие варианты, проще, то будет самой интересно узнать

Старый 15.10.2009, 16:04
niil вне форума Посмотреть профиль Отправить личное сообщение для niil Найти все сообщения от niil
  № 9  
Ответить с цитированием
niil

Регистрация: Oct 2009
Сообщений: 12
Вполне разумно. Вопрос: расширение классов осуществляется только через подключаемый as файл, в котором может быть например такое:
Код AS3:
package {
import flash.net.URLLoader;
 
	public class URLLoaderEx extends URLLoader
	{	
		public var CompName:String = new String;
	}
}
Или все же можно корректно расширить класс прямо в скрипте фрейма?
Для расширения компонента URLLoader на переменную CompName типа String - этого достаточно?

Старый 15.10.2009, 16:41
Gal4enochek вне форума Посмотреть профиль Отправить личное сообщение для Gal4enochek Найти все сообщения от Gal4enochek
  № 10  
Ответить с цитированием
Gal4enochek

Регистрация: May 2008
Адрес: Днепропетровск
Сообщений: 151
Отправить сообщение для Gal4enochek с помощью ICQ
Нужно отдельный файл с классом создавать. Да и вообще предпочтительнее код в классах писать, а не в кадрах.

Цитата:
Для расширения компонента URLLoader на переменную CompName типа String - этого достаточно?
Это уже на ваше усмотрение, что вы хотите дополнительно сохранять, можно строку, можно ссылку на клип или что-о еще. Как нужно для задачи.

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

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

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


 


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


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