РЕДАКТИРОВАТЬ: по любой причине, он работает в браузере, но не при компиляции / отладке в IDE.
Я не могу получить мои внешние SWF-файлы для получения уведомлений от моего менеджера одноэлементных событий (EventDispatcher). Вот подробности:
- Я добавляю детей из внешнего SWF-файла, используя метод getDefinition, в мой основной SWF-файл.
- Я использую одноэлементный EventDispatcher, который отвечает за прослушивание и диспетчеризацию.
- Использование пользовательского класса событий.
В этом коде я пытаюсь получить кнопку отключения звука, чтобы сообщить основному SWF, что значок отключения звука был нажат (SoundClipEvent.MUTE_CLICK). После отключения звука он должен отправить событие (SoundClipEvent.STATE) и подтвердить muteIcon состояние. В настоящее время значок отключения звука успешно отправляет событие MUTE_CLICK, и основной класс документа SWF может его забрать. MuteIcon (дочерний MC SWF) ничего не слышит от синглтона.
Ваша помощь в этой проблеме очень ценится!
SoundClipManager.as:
import flash.events.Event;
import flash.events.EventDispatcher;
public dynamic class SoundClipManager extends EventDispatcher {
private static var isMuted:Boolean;
public function SoundClipManager(blocker:SingletonBlocker):void {
super();
//
if (blocker == null) {
throw new Error("Error: Instantiation failed; Use SoundClipManager.getInstance()");
}
}
public static function get muted():Boolean {
return SoundClipManager.isMuted;
}
public static function set muted(value:Boolean) {
SoundClipManager.isMuted = value;
//
SoundClipManager.getInstance().dispatchEvent(new SoundClipEvent(SoundClipEvent.STATE,SoundClipManager.muted));
}
public static function getInstance():SoundClipManager {
if (instance == null) {
instance = new SoundClipManager(new SingletonBlocker());
}
return instance;
}
public override function dispatchEvent(evt:Event):Boolean {
return super.dispatchEvent(evt);
}
private static function stateChanged(evt:*) {
trace('state changed!');
}
}
internal class SingletonBlocker {}
MuteIcon.as
import flash.display.MovieClip;
import flash.events.MouseEvent;
import flash.events.Event;
//
public dynamic class IconMute extends MovieClip {
public function IconMute() {
this.addEventListener(Event.ADDED_TO_STAGE,this.addedToStage);
//
SoundClipManager.getInstance().addEventListener(SoundClipEvent.STATE,this.soundClipManagerStateChanged);
}
//
// Methods, Private
//
//
// Events
//
private function muteClick(evt:MouseEvent) {
SoundClipManager.getInstance().dispatchEvent(new SoundClipEvent(SoundClipEvent.MUTE_CLICK));
}
//
private function addedToStage(evt:Event) {
this.addEventListener(MouseEvent.CLICK,this.muteClick);
}
//
private function soundClipManagerStateChanged(evt:*) {
trace("state changed!");
}
}
SoundClipEvent.as
package {
//
import flash.events.Event;
//
public class SoundClipEvent extends Event {
public static const MUTE_CLICK:String = "muteClick";
public static const STATE:String = "state";
//
public var muted:Boolean;
public function SoundClipEvent(type:String,muted:Boolean = false) {
if(muted) this.muted = muted;
//
super(type,true,false);
}
}
}