grapefrukt碰到了頭,但更具體的它被稱爲事件流。簡單地說,當從顯示列表中的顯示對象調用dispatchEvent()時,有三個階段,它們是捕獲階段,目標階段和冒泡階段。在捕捉階段,Flash播放器從舞臺到顯示對象的顯示列表中,調用dispatchEvent()。然後,在目標階段,目標顯示對象調度該事件。然後在氣泡階段,事件起泡到舞臺。
對於您的情況,如果您希望Configurator顯示對象聽到從FramedPhoto顯示對象派發的事件,則必須將FramedPhoto添加到其顯示列表中。
我冒昧給你的項目添加一個文檔類,因爲你應該避免使用時間線。
package
{
import com.Configurator;
import flash.display.MovieClip;
public class Main extends MovieClip
{
public function Main():void
{
init();
}// end function
private function init():void
{
var configurator:Configurator = new Configurator();
addChild(configurator);
}// end function
}// end class
}// end package
我進口的配置類(改名從ABC封裝到COM)宣佈,實例化,並把它添加到顯示列表中。
package com
{
import com.FramedPhoto;
import flash.display.Sprite;
import flash.events.Event;
public class Configurator extends Sprite
{
public function Configurator():void
{
var framedPhoto:FramedPhoto = new FramedPhoto();
addChild(framedPhoto);
framedPhoto.addEventListener(FramedPhoto.FRAMED_PHOTO_LOADED, framedPhotoLoadedHandler);
}// end function
public function framedPhotoLoadedHandler(e:Event):void
{
trace("framePhotoLoadedHandler()");
}// end function
}// end function
}// end function
接下來在您的配置器類中,我導入了您的FramedPhoto類,並聲明並實例化了它。然後,我添加了一個事件監聽器,它監聽從framePhoto顯示對象分派的事件,並調用framedPhotoLoadedHandler()。
package com
{
import flash.display.Sprite;
import flash.events.Event;
public class FramedPhoto extends Sprite
{
public static const FRAMED_PHOTO_LOADED = 'framedPhotoLoaded';
public function FramedPhoto():void
{
addEventListener(Event.ADDED_TO_STAGE, addedToStageHandler);
}// end function
private function addedToStageHandler(e:Event):void
{
dispatchEvent(new Event(FRAMED_PHOTO_LOADED, true));
}// end function
}// end function
}// end function
最後在FramePhoto I類添加一個事件監聽到它,當FramePhoto顯示對象被添加到階段進行偵聽。當它被添加到舞臺時,它將調用addedToStageHandler(),它將調度該事件並將被捕獲到父配置器顯示對象中。
我希望這有助於:)
感謝grapefrukt,我現在有了一點啓發。 – 2010-12-06 10:01:47