2011-07-25 8 views
1

私はフラッシュシューティングゲームを持っていて、ユーザーがボトルを撃った後、私は破壊アニメーションをプレイしてスクリーンから取り除きます。問題は、ユーザーが速すぎるようにクリックすると、スーパーマンのように、何に関係なくメソッドに2回入力したようなものです。誰もこれを解決する方法を知っていますか?ここでオブジェクトがクリックされた後にマウスクリックを無効にする方法はありますか?

コードです:

public function bottleHasClicked(bottle : BottleBase) : void { 
     bottle.mouseEnabled = false; 
     collectedBottles++; 
     bottlesInRound--; 

     gameSound.getShootSound().playSound(); 
     gameSound.getBottleSound().playSound(); 


     ArrayUtil.removeValueFromArray(elementsInScreenArray, bottle); 
     cleanElementsTimer[bottle].stop(); 
     delete cleanElementsTimer[bottle]; 

     if (bottlesInRound == 0) { 
      stopElementsTimer(); 
      showElementsWaitForSeconds(0.5); 
     } 

     createBulletHole(); 
     bottle.play(); 
    } 

私が最初にすることは、オブジェクトにマウスを無効にすることであり、それはまだ発生します。私はボトルを再び表示するときにのみ有効にします。

+0

このメソッドをどのように呼び出すのですか? –

答えて

1

this postを参照してください:

あなただけ無効にマウス を持っている必要があり、単一の要素を持っている場合は、mouseEnabledプロパティを使用します。マウスのイベントの を無効にカスケードする特定のオブジェクトに子の 要素がある場合は、mouseChildrenプロパティを として設定してください。この2番目のものは、私がまだそれらを無効にしていたにもかかわらず、私がまだマウスのイベントに の応答を得ていたときに、私を捕まえました。

+0

私はこのような何かを試してみました:ため \t \t \t(VAR I:数= 0; iのbottle.numChildrenを<;私は++){ \t \t \t \t VAR子:オブジェクト= bottle.getChildAt(I); \t \t \t \t(子がムービークリップである)なら、{ \t \t \t \t \t child.mouseEnabled = FALSE; \t \t \t \t} \t \t \t} まだdoesntの仕事にseens – Gilson

0

ボトルクラスに「再生」変数がありませんか?あなたはbottleHasClicked()を呼び出す直前にチェックすることができます。また、addListener呼び出しを提供すると役立ちます。

0

これはいくつかの方法がありますが、マウスクリックイベントの登録方法によって異なります。それぞれの箇条書きにaddEventListener(MouseEvent.Click、...)を呼び出して最終的にbottleHasClickedを呼び出す場合は、removeEventListener(...)を呼び出してオブジェクトのリスナーを削除するだけで済みます。

他の方法を使用している場合は、ボトルが既にクリックされているかどうかを確認するブール値を追加するだけです(その変数 "wasClicked"偽)。この場合、上記のコードを次のように変更してください:

public function bottleHasClicked(bottle : BottleBase) : void 
{ 
    if(!bottle.wasClicked) 
    { 
     bottle.wasClicked = true; 
     bottle.mouseEnabled = false; 
     collectedBottles++; 
     bottlesInRound--; 

     gameSound.getShootSound().playSound(); 
     gameSound.getBottleSound().playSound(); 


     ArrayUtil.removeValueFromArray(elementsInScreenArray, bottle); 
     cleanElementsTimer[bottle].stop(); 
     delete cleanElementsTimer[bottle]; 

     if (bottlesInRound == 0) { 
      stopElementsTimer(); 
      showElementsWaitForSeconds(0.5); 
     } 

     createBulletHole(); 
     bottle.play(); 
    } 
} 

これはすべきことです。

関連する問題