AS3 でタワー ディフェンス ゲームに取り組んでいる学生がいて、困った問題を抱えています。彼は、hitTestObject を使用して、movieClip の移動方向を変更しています。ムービークリップには、オブジェクトが向いているさまざまな方向のフレームを含む独自のタイムラインと、オブジェクトの動作のコードを含むリンクされた .as ファイルがあります。
彼が gotoAndStop を呼び出して movieClip の内部フレームを変更すると、削除されたイベントがトリガーされますが、オブジェクトは画面に残り、移動しなくなります。
すべての検索で、オブジェクトの削除に関する回答が見つかりましたが、オブジェクト自体の削除を防止する方法については何も見ていません。
次のコードは、movieClip オブジェクトの .as クラス ファイルの ENTER_FRAME イベントによってトリガーされるループです。
private function eFrame(event:Event):void
{
if (_root.isPaused == false)
{
//MOVING THE ENEMY
this.x += speed * xDir;
this.y -= speed * yDir;
if (health <= 0)
{
_root.currency += 4;
this.parent.removeChild(this);
}
if (this.x > 770)
{
this.parent.removeChild(this);
_root.health -= 10;
_root.gotHit = true;
}
//checking if touching any invisible markers
for (var i:int=0; i<_root.upHolder.numChildren; i++)
{
//the process is very similar to the main guy's testing with other elements
var upMarker:DisplayObject = _root.upHolder.getChildAt(i);
if (hitTestObject(upMarker))
{
yDir = 1;
xDir = 0;
this.gotoAndStop(3);
}
}
for (i=0; i<_root.downHolder.numChildren; i++)
{
//the process is very similar to the main guy's testing with other elements
var downMarker:DisplayObject = _root.downHolder.getChildAt(i);
if (hitTestObject(downMarker))
{
yDir = -1;
xDir = 0;
this.gotoAndStop(7);
}
}
for (i=0; i<_root.rightHolder.numChildren; i++)
{
//the process is very similar to the main guy's testing with other elements
var rightMarker:DisplayObject = _root.rightHolder.getChildAt(i);
if (hitTestObject(rightMarker))
{
yDir = 0;
xDir = 1;
this.gotoAndStop(6);
}
}
for (i=0; i<_root.leftHolder.numChildren; i++)
{
//the process is very similar to the main guy's testing with other elements
var leftMarker:DisplayObject = _root.leftHolder.getChildAt(i);
if (hitTestObject(leftMarker))
{
yDir = 0;
xDir = -1;
this.gotoAndStop(2);
}
}
}
}
private function remove(event:Event):void
{
trace("remove");
removeEventListener(Event.ENTER_FRAME, eFrame);
_root.enemiesLeft -= 1;
}
}
gotoAndStop 行が実行されると、movieClip のフレームが変更され、コードは REMOVED イベントによってトリガーされる関数に直接ジャンプします。
このコードによって REMOVED イベントがトリガーされる理由を知っている人はいますか?
ご協力ありがとうございました。