简体   繁体   中英

Flash AS3 hit test go to next frame

I have a object that can be dragged into another object. I have set up a hit test for the collision. When the collision occurs I would like to progress to the next frame however, I have to click on the draggable object for it to do so. I would like it to move to the next frame right away without clicking. Is there anyway to fix this?

I mean after I have dragged the objected to create the collision I need to click on the object again to progress to the next frame. I do not want to have to click on the object again I want it to go to the next frame as the collision occurs.

This is my code

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();
}

collision()更改为事件侦听器,并将其附加到bottle

You should be checking for collisions after the drop , not at the start of the drag :

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

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

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

Try this one ( adapted from 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();
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM