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