0

ヘルプ!!

マウスをドラッグすると、そのムービー クリップが再生され、製品が 360 度回転するコードが mc にあります。

360 度スピンのさまざまな増分のこのムービークリップ内には、製品の各角度に関連するさまざまな他のアニメーションを含む子ムービークリップがあります。

経験..

シーン 1 > spinY_mc > AWComplete_mc

スピン用の私のコードは、シーン 1 のアクション内に記述され、spinY_mc を制御しますが、いったん AWComplete_mc に入ると、マウスをドラッグしてスピンできるようにしたくありませんか?

これは単純だと確信していますが、私はこれにまったく初心者であり、巨大なプロジェクトに取り組んでいます!

ムービークリップ (spinY_mc) で使用されるコードは次のとおりです。子 mc (AWComplete_mc) 内でこのコードが機能することは望ましくありません。

  // Rotation of Control Body Y

spin_Y.stop();
spin_Y.buttonMode = true;

var spin_Y:MovieClip;
var offsetFrame:int = spin_Y.currentFrame;
var offsetY:Number = 0;
var percent:Number = 0;


spin_Y.addEventListener(MouseEvent.MOUSE_DOWN, startDragging);
spin_Y.addEventListener(MouseEvent.MOUSE_UP, stopDragging);

function startDragging(e:MouseEvent):void
{
    // start listening for mouse movement
    spin_Y.addEventListener(MouseEvent.MOUSE_MOVE,drag);
    offsetY = stage.mouseY;
}

function stopDragging(e:MouseEvent):void
{
    // STOP listening for mouse movement
    spin_Y.removeEventListener(MouseEvent.MOUSE_MOVE,drag);
    // save the current frame number;
    offsetFrame = spin_Y.currentFrame;
}

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

function drag(e:MouseEvent):void
{
    // work out how far the mouse has been dragged, relative to the width of the spin_Y
    // value between -1 and +1
    percent = (mouseY - offsetY) / spin_Y.height;
    // trace(percent);

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

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

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

1 に答える 1

0

子からのイベントの伝播を停止して、親に伝わらないようにしたいだけだと確信しています。ブロックしたいイベントのリスナーを追加する場合(ブロックしたいのはmouseDownだとしましょう)。

child_mc.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownBlocker);

private function mouseDownBlocker(event:MouseEvent):void
{
    event.stopImmediatePropagation();
}

イベントが機能する方法は、マウスがヒットイベントを持つ「最も深い」子から始まり、すべての親を「バブル」します。伝播を停止すると、バブリングの発生がブロックされるため、親はイベントを取得しません。

于 2013-03-26T02:45:35.733 に答える