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