Search code examples
mouseframescalestage

Stage scaling affecting AS3


I have some code that controls a serious of images to produce and 360 spin when dragging mouseX axis. This all worked fine with the code I have used.

I have since had to design for different platform and enlarge the size of the stage i did this by scale to stage check box in the document settings.

While the mouse down is in action the spin works fine dragging through the images as intended but when you you release and start to drag again it doesn't remember the last frame and jumps to another frame before dragging fine again? Why is it jumping like this when all I have done is change the scale of everything?

please see code use to

//ROTATION OF CONTROL BODY X
spinX_mc.stop();

var spinX_mc:MovieClip;
var offsetFrame:int = spinX_mc.currentFrame;
var offsetX:Number = 0;
var percent:Number = 0;

//Listeners
spinX_mc.addEventListener(MouseEvent.MOUSE_DOWN, startDragging);
spinX_mc.addEventListener(MouseEvent.MOUSE_UP, stopDragging);

function startDragging(e:MouseEvent):void
{   

    // start listening for mouse movement
    spinX_mc.addEventListener(MouseEvent.MOUSE_MOVE,drag);
    offsetX = stage.mouseX; 
}

function stopDragging(e:MouseEvent):void
{
    ("stopDrag")
    // STOP listening for mouse movement
    spinX_mc.removeEventListener(MouseEvent.MOUSE_MOVE,drag);
    // save the current frame number;

    offsetFrame = spinX_mc.currentFrame;

    removeEventListener(MouseEvent.MOUSE_DOWN, startDragging);
}

// this function is called continuously while the mouse is being dragged

function drag(e:MouseEvent):void
{
    trace ("Drag")
    // work out how far the mouse has been dragged, relative to the width of the spinX_mc
    // value between -1 and +1
    percent = (mouseX - offsetX) / spinX_mc.width;
    // trace(percent);

    // work out which frame to go to. offsetFrame is the frame we started from
    var frame:int = Math.round(percent * spinX_mc.totalFrames) + offsetFrame;

    // reset when hitting the END of the spinX_mc timeline
    while (frame > spinX_mc.totalFrames)
    {
        frame -=  spinX_mc.totalFrames;
    }
    // reset when hitting the START of the spinX_mc timeline
    while (frame <= 0)
    {
        frame +=  spinX_mc.totalFrames;
    }

    // go to the correct frame
    spinX_mc.gotoAndStop(frame);
}

Solution

  • By changing

    spinX_mc.addEventListener(MouseEvent.MOUSE_MOVE,drag);
    offsetX = stage.mouseX; 
    

    to

    spinX_mc.addEventListener(MouseEvent.MOUSE_MOVE,drag);
    offsetX = mouseX;
    

    I seem to of solved the problem and everything runs smoothly again.