从帧转换到手动内容切换

早期的 Flash 开发人员使用框架,因为它们可以在 Flash 播放器中本地使用,以托管其应用程序的各种屏幕(通常是游戏)。最终,他们可能偶然发现一个问题,因为他们使用了框架,并且忽略了由此产生的困难,并且寻求保持框架结构的方法,同时也消除了使用框架及其复杂性的障碍。解决方案是使用 Sprite 后代类,或者使用单帧导出帧作为 MovieClips(对于那些在 Adobe Flash CS 中设计的帧),并使用 addChild()removeChild() 手动切换内容。

管理器类应该准备好所有子帧类,并且每当调用转换时,可以使用与此类似的函数:

var frames:Vector.<DisplayObject>; // this holds instances to ALL children
var currentFrame_alt:int; // current frame. Can't use the property
function changeFrame(frame:int):void {
    removeChild(frames[currentFrame_alt]);
    addChild(frames[frame]);
    currentFrame_alt=frame;
}

所有的孩子都可以发送和收听事件,Event.ADDED_TO_STAGE 用作 gotoAndStop() 定位该帧之后发生的任何事情的入口点,任何外向转换都可以编码为基于字符串的事件,这些事件正在 Main 类中被监听,然后执行过渡。

frames[0].addEventListener("startGame",startGame); // assuming frame 0 is a "Play" button
function startGame(e:Event):void {
    changeFrame(1); // switch to frame 1 - will display frames[1]
}

当然,应该预定义字符串集,例如,介绍屏幕可以有两个按钮来启动游戏,例如开始游戏开始静音,按钮应该分派不同的事件,然后处理在经理班中有所不同。

这种模式可以根据需要尽可能深入。如果项目的任何帧包含具有多个帧的 MovieClip,则也可以使用此方法将其解耦为精灵。