いつENTER_FRAME
止まる?
1. removeEventListener(Event.ENTER_FRAME,abc);
2. エラーが発生するか、フラッシュがクラッシュ
します。 3. クラスのインスタンスがステージ
4 から削除されます。
ストーリー:
ゲーム用の AS ドキュメントがいくつかあります。そのうちの 1 つに、ENTER_FRAME
追加する敵が含まれています。
通常は問題なく動作しますが、時々敵を召喚しなくなります。何も変更していません。もう一度テストするために Ctrl+enter を押しました。
私はtrace
チェックに慣れていて、ENTER_FRAME
停留所を見つけました。
それ以外の場合は、trace
の別の AS ファイルに入れてENTER_FRAME
、実行を続けます。それが機能しているかどうかをテストするための levelmanage クラスの
別のクラスで、両方とも停止します。エラーも発生せず、キーを介してオブジェクトを移動できます。
levelmange クラスはどのオブジェクトにも接続しません。ステージ上の何かが削除されても、停止するべきではありません。
何が問題なのですか? ENTER_FRAME
addEventListener(Event.ENTER_FRAME, process);
以下のアズコードは動作を停止したものです。
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();
}
}
}