2017-12-03 21 views
0

これは私の最初の質問ですが、最近この問題が発生しており、何か助けが必要です。Actionscript 3.0の子どもを削除

私はあなたたちを少しランダウンをあげる...

を私は週末のために小さな小さなAndroidのゲームをプログラミングしていると私は私の船の弾丸が敵にヒットすることで問題を抱えているとの両方が消えます私のコード:

stage.addEventListener(Event.ENTER_FRAME, Update); 
LeftButton.addEventListener(TouchEvent.TOUCH_OVER, LBOn); 
LeftButton.addEventListener(TouchEvent.TOUCH_BEGIN, LBTouch); 
LeftButton.addEventListener(TouchEvent.TOUCH_OUT, LBOff); 
LeftButton.addEventListener(TouchEvent.TOUCH_END, LBRelease); 
RightButton.addEventListener(TouchEvent.TOUCH_OVER, RBOn); 
RightButton.addEventListener(TouchEvent.TOUCH_BEGIN, RBTouch); 
RightButton.addEventListener(TouchEvent.TOUCH_OUT, RBOff); 
RightButton.addEventListener(TouchEvent.TOUCH_END, RBRelease); 
BA.addEventListener(TouchEvent.TOUCH_BEGIN, Shoot); 

これは私のステージのイベントリスナーブロックです。 ...

function Shoot(TouchEvent) { 

     SpawnBullet(); 

    }; 

[OK]を、簡単な現在のすべてのEventListenerは、この小さな部分では非常にシンプルであり、彼らは私がやっている何のために大丈夫動作しますが、最後のイベントは、関数シュートを呼び出し、物事はトリッキー取得する場所それはです十分な。私は実行すると

function SpawnBullet() { 

     var Bullet:Bullet1 = new Bullet1(); 
     stage.addChild(Bullet); 

      Bullet.x = Player.x; 
      Bullet.y = Player.y - (Player.height/2); 

       Bullet.addEventListener(Event.ENTER_FRAME, BulletUpdate); 

        function BulletUpdate(Event) { 

         Bullet.y -= 20; 

         if(Bullet.y <= 100) { 

          Bullet.removeEventListener(Event.ENTER_FRAME, BulletUpdate); 
          stage.removeChild(Bullet); 
          Bullet = null; 

         }; 

        }; 

    };  

:そこにあまり害私はそれを見る方法、私の弾丸を起動するために別の関数を呼び出すだけで機能は...

これは、私は、コードの実行を作ってみました方法ですゲーム私はこのエラーを取得:

ReferenceError: Error #1069: Property ENTER_FRAME not found on flash.events.Event and there is no default value. 
at Function/Shooter_fla:MainTimeline/SpawnBullet/Shooter_fla:BulletUpdate()[Shooter_fla.MainTimeline::frame1:41] 

私は偽の自分のスキルにしようとしていないよ、私は追加やお子様の仕事の除去方法を理解していないよ、と私はちょうど道のためにウェブを検索嫌い以来だと思います何かの仕方を学ばずに何かをするために私はここに少しの助けを求めて来ました。助けをあらかじめありがとう!

答えて

1

エラーは子供の追加/削除とは関係ありません。あなたの間違いは、クラス名と同じ名前の関数の引数イベントを宣言することです。したがって、コンパイラは混乱します。また、副注釈として、関数内で関数を宣言しないようにしてください。それは、歓迎する苦痛と恐怖のようなものです。

私はあなたのコードは次のように罰金になると思う。

function SpawnBullet():void 
{ 
    // With the "new" operator you can omit() if constructor has no arguments. 
    var aBull:Bullet1 = new Bullet1; 

    stage.addChild(aBull); 

    aBull.x = Player.x; 
    aBull.y = Player.y - (Player.height/2); 

    aBullet.addEventListener(Event.ENTER_FRAME, BulletUpdate); 
} 

function BulletUpdate(e:Event):void 
{ 
    // Get the reference to the bullet from the event. 
    // Alternately you might store it in a variable outside of both functions. 
    var aBull:Bullet1 = e.target as Bullet1; 

    aBull.y -= 20; 

    if (aBull.y <= 100) 
    { 
     aBull.removeEventListener(Event.ENTER_FRAME, BulletUpdate); 
     stage.removeChild(aBull); 
    } 
} 

P.S.コードを徹底的にフォーマットすることを恥ずかしくないでください。フォーマットされたコードはきれいで読みやすいものであり、書式設定を正しく行うだけでいくつかの間違いを避けることができます。

+0

さて、ありがとうございました!私はすぐにシャワーを浴びて、私の問題にあなたの解決策を試みます。コードの書式については、すべてをブロックで保つようにして、どのセクションが何であるかを簡単に読むことができるようにしています。私の目や組織にとってははるかに簡単だと思いますが、関数内の関数の宣言が悪い私は今もそのことを覚えておきます。また、「Bullet1としてのe.target」とは何かを教えてもらえますか?行う?私は "as"コマンドを使用したことがないので、... – Wobbufest

+0

@Wobbufestそれは型キャストです。基本的に、あなたは* "このリファレンスは** Bullet1 **クラスであり、単に** Object **というだけでなく、" *コンパイラにとってもいいと説明しています。必ずしも必要というわけではありません(あなたのコードで** aBull **を** DisplayObject **と宣言するのは問題ありません)が、コンパイラがあなたが何を期待しているか、あなたが望んでいないものをより良く知っていることが時々あります。アドレッシング。 https://stackoverflow.com/questions/12390347/whats-the-significance-of-as-keyword-in-this-code https://stackoverflow.com/questions/について**を**より詳しく読むことができます。 14268329/as3-cast-or-as – Organis

+0

まず、**の説明に感謝します。本当に私を助けました。 '関数BulletUpdate(イベント){ \t \t \t \t \t \tのvar ThisBullet:Bullet1 = Event.currentTargetとして 第二には、私はちょうど私が同じ問題に実行していることだし、コードを試してみました、ここに私のBulletUpdateイベントですBullet1; \t \t \t \t \t \t ThisBullet.y - = 20; \t \t \t \t \t \t \t IF(ThisBullet.y <= 100){ \t \t \t \t \t \t \t \t \t \t ThisBullet.removeEventListener(Event.ENTER_FRAME、BulletUpdate)。 \t \t \t \t \t stage.removeChild(ThisBullet); \t \t \t \t \t \t \t \t \t}。 \t \t \t \t \t}; ' まだ何か不足していますか? PS .: e.targetがBullet1として機能していないように見えたので、Event.targetに変更しました – Wobbufest