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

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

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

Регистрация: Apr 2006
Сообщений: 184
Question Вопрос по dispatchEvent

Всем доброго дня, вот возник вопрос по dispatchEvent.

Задача такая чтобы из одного класса вызывать функцию в другом.
Попытаюсь поястнить.

Вот создал класс кнопки для своих проектов:

Код:
import mx.utils.Delegate;
import mx.utils.Proxy;
import mx.transitions.Tween;


class pf.EasyButton extends MovieClip {
	public var dispatchEvent:Function;
	private var bMovie:MovieClip;

	public function EasyButton(bMovie, evName) {

		bMovie.onRollOver = Proxy.create(this, this.buttonOver, [bMovie]);
		bMovie.onRollOut = Proxy.create(this, this.buttonOut, [bMovie]);
		bMovie.onRelease = Proxy.create(this, this.buttonRelease, [evName]);

	}
	private function buttonOver(param) {
		delete param[0].onEnterFrame;
		param[0].gotoAndPlay(2);
	}

	private function buttonOut(param) {
		param[0].onEnterFrame = function() {
			this.gotoAndStop(this._currentframe-1);
		};
		if (this._currentframe == 1) {
			delete param[0].onEnterFrame;
		}
	}


	private function buttonRelease(param) {

		dispatchEvent({type:param[0], target:this});

	}
}
В родительском классе код например такой:

Код:
closeHelpToolButton = new EasyButton(_root.mcCloseImage, "closeHelpTool");

closeHelpToolButton.addEventListener("closeHelpTool",Proxy.create(this, this.closeBigImage, []));
Задача такова чтобы при нажатии на кнопку срабатывала функция, в данном случае - closeHelpTool. Но она не отрабатывает, подскажите в чем проблема.

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

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

Регистрация: May 2003
Адрес: Tallinn
Сообщений: 3,182
вот наваял простой пример и, по-моему, очень понятный

создаём 2 класса:
MotherClass.as
Код:
import mx.utils.Delegate;

class MotherClass {
	
	public function MotherClass(){
		var child:ChildClass = new ChildClass();
		
		child.addEventListener("update", Delegate.create(this, callsFromChild));
		child.callMother();
	}
	
	private function callsFromChild(callObj:Object){
		switch(callObj.event){
			case "motherFeedMe":
				trace("ok child, I feed you!");
				break;
				
			default:
				trace("I DON'T UNDERSTAND YOU DEAR CHILD!");
				break;
		}
	}
}
ChildClass.as
Код:
import mx.events.EventDispatcher;

class ChildClass {
	public function ChildClass(){
		EventDispatcher.initialize(this);
	}
	
	public function callMother(){
		dispatchEvent({type:"update", event:"motherFeedMe"});
	}
	
	//dispatcher methods
	public function dispatchEvent():Void {};
	public function addEventListener():Void {};
	public function removeEventListener():Void {};
}
во fla файле пишем:
Код:
var mom:MotherClass = new MotherClass();
__________________
Flash Developer
Папа TDP4 Team Battle

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

Регистрация: Sep 2002
Сообщений: 30,787
Необходимо сначала проинициализировать экземпляр класса с помощью EventDispatcher.

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

Регистрация: Apr 2006
Сообщений: 184
Да, огромное спасибо! Вы даже не представляете как вы мне помогли! Кстати думаю достойный пост для FAQ

Еще раз спасибо.

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

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

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


 


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


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