Actionscript 3 输入帧停止工作,无错误

Actionscript 3 输入帧停止工作,无错误,actionscript-3,enterframeevent,Actionscript 3,Enterframeevent,ENTER\u FRAME何时停止? 1.removeEventListener(事件输入框,abc) 2.发生错误或闪存崩溃 3.类的实例已从阶段中删除 4. ? 故事: 我有几个游戏的AS文档,其中一个包含添加敌人的ENTER\u FRAME。 它通常工作正常,但有时不再召唤敌人。我没有更改任何内容,只是按Ctrl+enter再次测试。 我使用了跟踪进行检查,发现进入帧停止。 否则,我将trace作为ENTER\u FRAME的文件放入另一个文件中,它将继续运行。 另一个ENTER_FRAM

ENTER\u FRAME
何时停止?
1.removeEventListener(事件输入框,abc)
2.发生错误或闪存崩溃
3.类的实例已从阶段中删除
4. ?

故事:
我有几个游戏的AS文档,其中一个包含添加敌人的
ENTER\u FRAME

它通常工作正常,但有时不再召唤敌人。我没有更改任何内容,只是按Ctrl+enter再次测试。
我使用了
跟踪
进行检查,发现
进入帧
停止。
否则,我将
trace
作为
ENTER\u FRAME
的文件放入另一个文件中,它将继续运行。
另一个
ENTER_FRAME
在levelmanage类中测试它是否工作,它和
addEventListener(Event.ENTER_FRAME,process)也停止
我也没有任何错误,我仍然可以通过关键点移动我的对象。
levelmange类没有连接到任何对象,如果舞台上的任何东西被删除,它不应该停止。
有什么问题吗

以下as代码是停止操作的代码

package 
{
    import flash.display.MovieClip;
    import flash.events.Event;
    import flash.utils.*;
    public class levelmanage extends MovieClip
    {
        var testing:int=0
        private var sttage = ninelifes.main;
        public var framerate = ninelifes.main.stage.frameRate;
        public var levelprocess:Number = 0;
        public var levelprocesss:Number = 0;
        private var level:int;
        public var randomn:Number;
        public function levelmanage(levell:int)
        {
            level = levell;
            addEventListener(Event.ENTER_FRAME, process);
        }
        function process(e:Event)
        {
            testing+=1
            if(testing>200){
                testing=0
                trace("working")//it don't trace "working"sometimes which means enterframe doesn't going
            }
            if (levelprocess>levelprocesss)trace(levelprocess);
            levelprocesss = levelprocess;
            if (levelprocess>=100 && enemy.enemylist.length==0)
            {
                finish();
                return();
            }
            if (levelprocess<=100 && enemy.enemylist.length<6)
            {
                switch (level)
                {
                    case 1 :
                        arrange("cir",0.5);
                        arrange("oblong",1);
                        break;
                }
            }
            }
        public function arrange(enemyname:String,frequency:Number)
        {
            randomn = Math.random();
            if (randomn<1/frequency/framerate)
            {
                var theclass:Class = Class(getDefinitionByName(enemyname));
                var abcd:*=new theclass();
                sttage.addChild(abcd);
                trace("enemyadded")
                switch (enemyname)
                {
                    case "cir" :
                        levelprocess +=  5;
                        break;
                    case "oblong" :
                        levelprocess +=  8;
                        break;
                }
            }
        }
        private function finish()
        {
            levelprocess=0
            trace("finish!");
            removeEventListener(Event.ENTER_FRAME,process);//not this one's fault,"finish" does not appear.
            sttage.restart();
        }
    }
}
包
{
导入flash.display.MovieClip;
导入flash.events.Event;
导入flash.utils。*;
公共类级别管理扩展了MovieClip
{
var测试:int=0
private var sttage=ninelifes.main;
public var framerate=ninelifes.main.stage.framerate;
公共变量levelprocess:编号=0;
公共变量levelprocesss:Number=0;
私有var级别:int;
公共变量n:编号;
公共功能级别管理(级别:int)
{
水平=水平;
addEventListener(Event.ENTER_帧,进程);
}
功能流程(e:事件)
{
测试+=1
如果(测试>200){
测试=0
跟踪(“工作”)//有时不跟踪“工作”,这意味着enterframe无法运行
}
如果(levelprocess>levelprocesss)跟踪(levelprocess);
levelprocesss=levelprocess;
if(levelprocess>=100&&friend.enemylist.length==0)
{
完成();
return();
}

如果(levelprocess你可能最终达到“levelprocess==100”和“敌方.enemylist.length==0”条件,这会导致你的关卡完成并有机会产生更多的敌人,这显然是一种不正常的条件。这可能是你的错误的原因,尽管很不幸。快速修复方法是插入一个“return;”在调用finish()之后立即执行。也可能是您的“levelmanage”对象以某种方式从stage中删除,并停止接收enter frame事件,这可能是由单个对象抛出两个“sttage.restart()”调用触发的。请在“进程”中的任何时候检查此条件是否为真“功能,并检查与此行为的相关性。并尽一切可能消除此类情况的可能发生。”

if(testing>200){
                testing=0
                trace("working")//it don't trace "working"sometimes which means enterframe doesn't going
            }

你评论中的推论不正确。这意味着要么EnterFrame没有开火,要么测试thx寻求帮助,主要问题还没有解决。我已经将
返回
放在
finish()
之后,它防止敌人在
finish()之后出现
;levelmange类不连接到任何对象,如果已删除stage上的任何内容,它不应停止。如果选中了
sttage.restart()
,则只有此命令可调用
restart()
。另外,我在levelmanage类中放置了另一个
ENTER\u FRAME
,这一个和原来的一个都因为未知的原因而停止。可能尝试更改侦听器的连接点?您有
addEventListener(Event.ENTER\u FRAME,process);
try
sttage.addEventListener(Event.ENTER\u FRAME,process);
取而代之。原因是,您的
levelmanage
实例可能无法添加到该阶段。还要检查您是否控制整个项目中的每个侦听器,也许您做了一些可能会扰乱Flash事件系统的事情。我想罪魁祸首不在该代码范围内。似乎
sttage.addEvent监听器(Event.ENTER#u FRAME,process);
在20次测试中始终工作良好,我不再遇到stop,即使它没有什么其他问题(ArgumentError:Error#2025)。但最后
sttage.stage.addEventListener(Event.ENTER#FRAME,process);
工作非常好。谢谢您的帮助。我键入
if(testing>200)
原因,因此
trace()
会在一段时间内显示消息。也许你是对的,这不是
ENTER\u FRAME
本身的问题。