2012-03-13 5 views
0

私はフラッシュでプラットフォームゲームを作っています。プラットフォームのゲームを作る、実行を停止する方法が必要

私はゴールクラス(目標スプライトのコードを含むクラス。ヒットしたときにゲームの次の部分に進みます)。ゴールコンストラクタの内部

、2人のイベントリスナーが追加され、以下のように、彼らは以下のとおりです。

addEventListener(Event.ADDED, beginClass); 
addEventListener(Event.ENTER_FRAME, eFrame); 

beginClass機能は結構です、と一度だけ実行されますが、eFrameは、プレイヤーがゴールを襲っているかどうかをチェックするものです、それは絶えず走っています。問題は、プレイヤーがゴールに達すると、eFrameが次のシーンをプレイヤーに説明するメニュー内で実行され続けることです。私のeFrame機能は以下の通りです。

private function eFrame(event:Event):void{ 
     if(hitTestObject(_root.mcMain)){ 
      var lastScore:int = _root.mainScore; 
      _root.mainScore = lastScore; 
      while (_root.lvlHolder.numChildren > 0) { 
        _root.lvlHolder.removeChildAt(0); 
      } 
      _root.mcMain.removeChildAt(0); 
      _root.isInCut = true; 
      if (_root.lvlCurrent == 1) { 
       _root.gotoAndStop(2); 
      } else if (_root.lvlCurrent == 2) { 
       _root.gotoAndStop(3); 
      } else if (_root.lvlCurrent == 3) { 
       _root.gotoAndStop(4); 
      } 
     } 
    } 

フレーム2、3、4、テキストだけプレイヤーにメッセージを表示するボタンでフレームであり、その後、プレイヤーヒットを続けます。私の問題は、eFrameはまだ実行しようとしていますが、クラスはインスタンス化されておらず、メソッドはプレーヤが継続すると極端な遅延を引き起こしています。

答えて

0

インサイドeFrame()イベントリスナーを停止:

にremoveEventListener(Event.ENTER_FRAME、eFrameを)。あなたがそうこれを試してステージにイベントリスナーを追加している

+0

私はそれをしましたが、まだそれをやっています。フレーム2になったら、フレーム1のコードは正しく実行されません。これはGoalクラスが呼び出される場所です。 – Darren

0

:目標インサイド

stage.removeEventListener(Event.ENTER_FRAME, eFrame); 

または

parent.removeEventListener(Event.ENTER_FRAME, eFrame); 

または

event.target.removeEventListener(Event.ENTER_FRAME, eFrame); 
2

を、_rootのポイントは何ですか? ADDEDADDED_TO_STAGEにイベントを変更 、そのように、イベントは、我々は、このスプライトはstage性質を持って知って発射されたとき:

は、とにかくここに私がやったものです。

addEventListener(Event.ADDED_TO_STAGE, beginClass); 

コンストラクタからeFrameイベントを削除します。 eFrameで今

stage.addEventListener(Event.ENTER_FRAME, eFrame); 

、あなたが上空ステージ基準でイベントを削除することができますので、同様に、stageで、beginClassに追加します。参照が間違っていたため(先に_root変数があったとしても)、以前は機能しませんでした。

stage.removeEventListener(Event.ENTER_FRAME, eFrame); 

しかし - あなたのコードのこの部分の前にそれを行うことを忘れないでください:

while (_root.lvlHolder.numChildren > 0) { 
    _root.lvlHolder.removeChildAt(0); 
} 

スプライトが除去されると、それはもうstage性質を持っていないので。すべての可能なシナリオでイベントをクリーンアップすることを忘れないでください。私は完全にはわかりませんstageはあなたの入力フレームイベントを配置するための適切な場所です、私はあなたが以前に_rootと呼んでいたので、

関連する問題