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);
trysttage.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
本身的问题。