1

別のオブジェクトにドラッグできるオブジェクトがあります。衝突のヒット テストをセットアップしました。衝突が発生したら、次のフレームに進みたいのですが、そのためにはドラッグ可能なオブジェクトをクリックする必要があります。クリックせずにすぐに次のフレームに移動してほしい。とにかくこれを修正する方法はありますか?

オブジェクトをドラッグしてコリジョンを作成した後、次のフレームに進むにはオブジェクトをもう一度クリックする必要があります。オブジェクトをもう一度クリックする必要はありません。衝突が発生したときに次のフレームに移動したいです。

これは私のコードです

bottle.buttonMode = true;

bottle.addEventListener(MouseEvent.MOUSE_DOWN, drag);

bottle.addEventListener(MouseEvent.MOUSE_UP, drop);


function collision():void{
   if(bottle.hitTestObject(hit)){
    nextFrame();
    }
  }

 function drag(e:MouseEvent):void{
 bottle.startDrag();
 collision();
}



    function drop(e:MouseEvent):void{
    bottle.stopDrag();
}
4

3 に答える 3

0

collision()イベントリスナーに変更し、にアタッチしbottleます。

于 2013-02-04T19:31:55.283 に答える
0

dropの開始時ではなく、 の後に衝突をチェックする必要がありますdrag

function collision():void{
    if(bottle.hitTestObject(hit)){
        nextFrame();
    }
}

function drag(e:MouseEvent):void{
    bottle.startDrag();
}

function drop(e:MouseEvent):void{
    bottle.stopDrag();
    collision();
}
于 2013-02-05T00:19:21.980 に答える
0

これを試してみてください(Gary Rosenzweigから改作):

bottle.buttonMode = true;

bottle.addEventListener( MouseEvent.MOUSE_DOWN, startBottleDrag );
stage.addEventListener( MouseEvent.MOUSE_UP, stopBottleDrag );

function collision():void {
    if( bottle.hitTestObject( hit ) ) {
        stopBottleDrag();
        nextFrame();
    }
}

// to keep bottle location as it is when clicked
var clickOffset:Point = null;

function startBottleDrag( e:MouseEvent ) {
    clickOffset = new Point( e.localX, e.localY );
    bottle.addEventListener( Event.ENTER_FRAME, dragBottle );
}

function stopBottleDrag( e:MouseEvent = null ) {
    clickOffset = null;
    bottle.removeEventListener( Event.ENTER_FRAME, dragBottle );
}

function dragBottle( e:Event ) {
    bottle.x = mouseX - clickOffset.x;
    bottle.y = mouseY - clickOffset.y;
    collision();
}
于 2013-02-05T16:21:26.533 に答える