0

このseatBeltオブジェクトを水平面上で動かそうとしています。これまでにやったことを投稿しました。ボタンを押すとシートベルトが右側にしか動かず、動かないように見えるので、実際にはうまくいきMOUSE_UPません。誰かがこれを行う方法について私を導くことができますか?

 seatBelt.addEventListener (MouseEvent.MOUSE_DOWN, prsing);
    seatBelt.addEventListener (MouseEvent.MOUSE_UP, lfting);
    seatBelt.addEventListener (MouseEvent.MOUSE_MOVE, mving);




    function prsing (e:MouseEvent){
    posX= seatBelt.x ;
        posY = seatBelt.y ;
        mouseclick = 1;


    }
    function mving (e:MouseEvent) {
        if (mouseclick == 1) {
        seatBelt.x = mouseX ;
        }
    }

    function lfting (e:MouseEvent){
        seatBelt.x = posX;
        seatBelt.y = posY;
        mouseclick =0;

    }
4

3 に答える 3

1

それで、あなたの意図した機能は、シートベルトをx軸に沿ってドラッグし、リリース時に元の位置に戻すことができるようにすることですか?

シートベルトではなくステージを聞くには、MOUSE_UPとMOUSE_MOVEを変更する必要があります。これは、ボタンがシートベルトを超えなくなったときにボタンを離すことができるため、関数が呼び出されないためです。ただし、ステージはイベントを受け取ります。

stage.addEventListener(MouseEvent.MOUSE_UP, lifting);
stage.addEventListener(MouseEvent.MOUSE_MOVE, moving);

mouseX変数を宣言している場所がわかりませんが、機能をドラッグした後は、リスナーを次のように変更します。

   function moving (e:MouseEvent) {
        if (mouseclick == 1) {
        seatBelt.x = e.stageX;
        }
    } 
于 2013-03-27T01:44:39.507 に答える
0

私が起こっていると思うことを除いて、あなたが持っているものはほとんどコード的には大丈夫に見えますが、あなたはステージ上/シートベルトオブジェクトから離れた場所で「マウスを上げている」ということです。これは、オブジェクトを動かすために、マウスの移動に反応してオブジェクトを移動させると推測しています...これに対して、マウスをステージ全体に移動し、シートベルトオブジェクトから離して、その時点でマウスを離します。

これが当てはまるかどうかを確認するには、seatBeltオブジェクトの上でマウスを離して、MOUSE_UPイベントがトリガーされるかどうかを確認してください。

マウスを離した場所に関係なく、任意の時点でオブジェクトの移動を停止させたいという動作が必要だと思います。これを行うには、MOUSE_UPイベントリスナーをステージに追加してみてください。

this.stage.addEventListener (MouseEvent.MOUSE_UP, lfting);

ただし、このリスナーを常にアクティブにする必要はない場合があるため、必要な場合にのみリスナーを追加および削除して、オブジェクト上でマウスを押したときにのみ追加してください。

コードを少し編集して意味を示し、「mouseclick」ブール値を削除しました。これは、マウスの上下のイベントを追跡する必要がなくなったためです。

seatBelt.addEventListener(MouseEvent.MOUSE_DOWN, prsing);

function prsing(e:MouseEvent){
    posX= seatBelt.x ;
    posY = seatBelt.y ;
    this.stage.addEventListener(MouseEvent.MOUSE_MOVE, mving);
    this.stage.addEventListener(MouseEvent.MOUSE_UP, lfting);
}

function mving(e:MouseEvent) {
    seatBelt.x = mouseX;
}

function lfting(e:MouseEvent){
    seatBelt.x = posX;
    seatBelt.y = posY;
    this.stage.removeEventListener(MouseEvent.MOUSE_MOVE, mving);
    this.stage.removeEventListener(MouseEvent.MOUSE_UP, lfting);
}
于 2013-03-27T01:49:30.780 に答える
0

Sprite.startDragメソッドを使用して、必要なことを実行できます。MOUSE_MOVEリスナーは必要ありません。必要に応じてパラメータを検索します。スプライト。 一度にアクティブにするのは、MOUSE_DOWNリスナーまたはMOUSE_UPリスナーの1つだけにするのが好きです。

seatBelt.addEventListener (MouseEvent.MOUSE_DOWN, prsing);

function prsing (e:MouseEvent){
    seatBelt.startDrag(false, new Rectangle(0,seatBelt.y,stage.width,seatBelt.y));
    seatBelt.removeEventListener (MouseEvent.MOUSE_DOWN, prsing);
    seatBelt.addEventListener (MouseEvent.MOUSE_UP, lfting);
}

function lfting (e:MouseEvent){
    seatBelt.stopDrag();
    seatBelt.addEventListener (MouseEvent.MOUSE_DOWN, prsing);
    seatBelt.removeEventListener (MouseEvent.MOUSE_UP, lfting);
}
于 2013-03-27T01:51:08.773 に答える