作为一般做法,stage
不应引用- 特别是在您的情况下,您的引用仅用于添加子弹类的实例。如果是 z-index 的问题,则可以改为使用一个层,其中项目符号放置在显示列表中其他显示对象的顶部。
除了在单个阶段加载多个 SWF 的复杂性之外,通过将显示对象添加到它们自己的显示列表层次结构中,您的代码将成为很好的独立功能单元。或者,您可以利用控制器操纵视图的 MVC 模式。
为了使您的代码正常工作,该类必须是 SWF 的主要功能或添加到舞台。
如果它是 SWF 的主要函数,init()
将被调用。
否则,请确保它通过addChild()
.
你真的打算每帧发射一颗子弹吗?那可能是每秒 24 到 60 发子弹。您可能希望以一定的概率限制它是否带火子弹。
假设这是一个战场,并且你的战场类被添加到阶段,它可以这样实现:
package
{
import flash.display.Sprite;
import flash.events.Event;
[SWF(percentWidth = 100, percentHeight = 100, backgroundColor = 0x0, frameRate = 30)]
public class Battlefield extends Sprite
{
public function Battlefield()
{
if (stage)
init();
else
addEventListener(Event.ADDED_TO_STAGE, addedToStageHandler);
}
protected function addedToStageHandler(event:Event):void
{
removeEventListener(Event.ADDED_TO_STAGE, addedToStageHandler);
init();
}
protected function init():void
{
addEventListener(Event.ENTER_FRAME, frameHandler);
}
protected function frameHandler(event:Event):void
{
var odds:Number = Math.random();
trace((odds < 0.1 ? "Fire! " : "Skip...") + "Odds were: " + odds);
}
}
}
这将输出:
Skip... Odds were: 0.3539872486144304
Skip... Odds were: 0.742108017206192
Fire! Odds were: 0.025597115512937307
Skip... Odds were: 0.7608889108523726
Fire! Odds were: 0.08514392375946045
Skip... Odds were: 0.27881692815572023
除了 Stage3D,我从不喜欢这种初始化模式,因为您可以轻松地依赖舞台事件,如下所示:
package
{
import flash.display.Sprite;
import flash.events.Event;
[SWF(percentWidth = 100, percentHeight = 100, backgroundColor = 0x0, frameRate = 30)]
public class Battlefield extends Sprite
{
public function Battlefield()
{
addEventListener(Event.ADDED_TO_STAGE, addedToStageHandler);
}
protected function addedToStageHandler(event:Event):void
{
removeEventListener(Event.ADDED_TO_STAGE, addedToStageHandler);
addEventListener(Event.REMOVED_FROM_STAGE, removedFromStageHandler);
addEventListener(Event.ENTER_FRAME, frameHandler);
}
protected function removedFromStageHandler(event:Event):void
{
removeEventListener(Event.ENTER_FRAME, frameHandler);
removeEventListener(Event.REMOVED_FROM_STAGE, removedFromStageHandler);
addEventListener(Event.ADDED_TO_STAGE, addedToStageHandler);
}
protected function frameHandler(event:Event):void
{
var odds:Number = Math.random();
trace((odds < 0.1 ? "Fire! " : "Skip...") + "Odds were: " + odds);
}
}
}
因此,在添加到阶段时,该类启动其操作,并且在从阶段移除时,该类终止其操作。