2011-09-12 6 views
0

これは私が達成しようとしているものです。ムービークリップ(cannon_mc)をクリックして AS3スピード/パワーを上げるためにmouseDownを保持

ショットは、長いマウスは、ダウンボールが増加するはずで発射されるウィッヒの速度である(ball_mc)

解雇されています。 私の質問はあなたです。

これを達成する最も効率的な方法は何ですか? このようなタイマーなどでは、

var isMouseDown:Boolean = false; 
    var speed= 10;  

    myCannon.addEventListener(MouseEvent.MOUSE_DOWN,buttonPressed); 

     function buttonPressed(event:MouseEvent){ 
      //trace("down"); 
      isMouseDown == true; 

      if(isMouseDown == false) 
      { 
       speed == +1 
      } 

     } 
+0

いずれかの回答がありましたあなたの問題を解決する?その場合は、最も有益な回答を受け入れられた回答としてマークしてください。また、必要な場合は、さらに援助を求めることも躊躇しないでください。 – danishgoel

答えて

7

MOUSE_DOWNイベントは1回だけ発生します。効果を得るには、MOUSE_DOWNおよびMOUSE_UPイベントハンドラのコンボが必要です。

あなたはMOUSE_DOWNに設定された変数がtrueの場合はその後MOUSE_UPに、あなたは、経過時間を計算flash.utils.getTimer()

から現在のタイムスタンプを伴って含むMOUSE_DOWNイベントにtrueに変数を設定し、それに応じて電力を設定することができます。

例:あなたはまた、ENTER_FRAMEイベントを追加して、視覚効果のために

をパワーゲージか何かをアニメーション化することができます

var isMouseDown:Boolean = false; 
var mouseDownBegin:int; 
var speed = 10; 
var speed_inc = 2; // give it in per second 
var speed_max = 100; // max speed possible 

// add event handlers 
myCannon.addEventListener(MouseEvent.MOUSE_DOWN, buttonPressed); 
myCannon.addEventListener(MouseEvent.MOUSE_UP, buttonReleased); 

function buttonPressed(event:MouseEvent){ 
    isMouseDown = true; 
    mouseDownBegin = flash.utils.getTimer(); 
} 

function buttonReleased(event:MouseEvent){ 
    if(isMouseDown == true){ 
     // get time between press and release 
     var timeElapsed = flash.utils.getTimer() - mouseDownBegin; 

     // reset isMouseDown 
     isMouseDown = false; 

     // compute speed 
     speed += int(Math.floor(speed_inc * (timeElapsed/1000.0))); 
     speed = Math.min(speed, speed_max); 

     // code to fire ball with new speed 
     // ....... 
    } 
} 

更新
としてはMOUSE_UPイベントは発生しません、The_asManによって指さマウスがドラッグされてステージの外側にリリースされた場合。このような場合を処理するために追加して、イベントリスナーをMOUSE_LEAVEイベントにbuttonReleased機能のコピーとしてコールバックではなく、イベントオブジェクトとる:(非常に短い擬似コードで)

function buttonReleasedOutsideStage(event:Event){ 
    if(isMouseDown == true){ 
     // get time between press and release 
     var timeElapsed = flash.utils.getTimer() - mouseDownBegin; 

     // reset isMouseDown 
     isMouseDown = false; 

     // compute speed 
     speed += int(Math.floor(speed_inc * (timeElapsed/1000.0))); 
     speed = Math.min(speed, speed_max); 

     // code to fire ball with new speed 
     // ....... 
    } 
} 
stage.addEventListener(Event.MOUSE_LEAVE, buttonReleasedOutsideStage); 
+0

これはおそらく私のやり方に近いでしょうが、私はステージの外側にマウスを置くと考えています。 –

+0

マウスがドラッグされてステージの外にリリースされた場合、 'MOUSE_UP'イベントは発生しません。このケースを処理するには、同じbuttonReleased関数としてコールバックを持つ 'MOUSE_LEAVE'イベントの追加とイベントリスナー – danishgoel

+0

この素晴らしい答えと説明ありがとうございました – Opoe

2


いくつかのイベントハンドラを書く:

  • れるonmousedown:フラグ_mouseDownを設定ゼロ
  • onFrameにpowerを設定:if (_mouseDown) power++;
  • onMouseU P:

    • れるonmousedown:_loadStart = getTimer(); _mouseDown = true; _power = 0;
    • onFrame:if (_mouseDown) delta = getTimer() - _loadStart; _power += delta;
    • onMouseUpの:_mouseDown = false;
    • _powerでボールを撮影し、蓄積 power

    フレームレートの独立したバージョンでフラグ_mouseDownや火災のボールをクリア

関連する問題