0

こんにちは、インターネットで検索してフラッシュ as3 カルーセルを作成しました。コードは次のとおりです。

var centerX:Number = stage.stageWidth / 1.7;
var centerY:Number = stage.stageHeight / 2;
var radiusX:Number = 180;
var radiusY:Number = 50;
var speed:Number = 0.1;
var minSpeed:Number = -0.05;
var maxSpeed:Number = 0.05;
var rangeSpeed:Number = maxSpeed - minSpeed;
var minY:Number = centerY - radiusY;
var maxY:Number = centerY + radiusY;
var rangeY:Number = maxY - minY;
var minScale:Number = 0.2;
var maxScale:Number = 1.0;
var rangeScale:Number = maxScale - minScale;
var itemArray:Array = new Array();
itemArray.push(new cubeblue());

itemArray.push(new cubeblue());

itemArray.push(new cubeblue());

itemArray.push(new cubeblue());

itemArray.push(new cubeblue());

itemArray.push(new cubeblue());

var canvas:MovieClip = new MovieClip();
addChild(canvas);

for (var i:Number = 0; i < itemArray.length; i++)
{
    canvas.addChild(itemArray[i]);
    itemArray[i].buttonMode = true;
    itemArray[i].addEventListener(MouseEvent.MOUSE_DOWN, stop);
    itemArray[i].itemAngle = Math.PI * 2 / itemArray.length * i;
    itemArray[i].addEventListener(Event.ENTER_FRAME, animate);
}



function animate(e:Event):void
{
    speed = mouseX / stage.stageWidth * rangeSpeed + minSpeed;
    e.currentTarget.x = Math.cos(e.currentTarget.itemAngle) * radiusX + centerX;
    e.currentTarget.y = Math.sin(e.currentTarget.itemAngle) * radiusY + centerY;
    e.currentTarget.itemAngle += speed;
    itemArray.sortOn("y");

    for(var i:Number = 0; i < itemArray.length; i++)
    {
        canvas.setChildIndex(itemArray[i], i);
        var pct:Number = (itemArray[i].y - minY) / rangeY;
        var scale:Number = pct * rangeScale + minScale;
        itemArray[i].scaleX = itemArray[i].scaleY = scale;
    }
}
function stop(event:MouseEvent):void {


}

さて、いくつかの変更の後、関数 stop を使用して、レイヤー上の 1 つの要素をクリックしてカルーセルを停止したいのですが、これを行う方法がわかりません! 誰かが私を助けることができますか?

よろしく`

4

1 に答える 1

0

まず第一に、stopオーバーライドする予定がない限り関数に名前を付けることはできませんが、この場合はそうではありません。ENTER_FRAMEカルーセルの回転を止めるには、イベントを削除するだけです。stop関数の名前を次のように変更しましたstopAnimate

var centerX:Number = stage.stageWidth / 1.7;
var centerY:Number = stage.stageHeight / 2;
var radiusX:Number = 180;
var radiusY:Number = 50;
var speed:Number = 0.1;
var minSpeed:Number = -0.05;
var maxSpeed:Number = 0.05;
var rangeSpeed:Number = maxSpeed - minSpeed;
var minY:Number = centerY - radiusY;
var maxY:Number = centerY + radiusY;
var rangeY:Number = maxY - minY;
var minScale:Number = 0.2;
var maxScale:Number = 1.0;
var rangeScale:Number = maxScale - minScale;
var itemArray:Array = new Array();
itemArray.push(new cubeblue());

itemArray.push(new cubeblue());

itemArray.push(new cubeblue());

itemArray.push(new cubeblue());

itemArray.push(new cubeblue());

itemArray.push(new cubeblue());

var canvas:MovieClip = new MovieClip();
addChild(canvas);

for (var i:Number = 0; i < itemArray.length; i++)
{
    canvas.addChild(itemArray[i]);
    itemArray[i].buttonMode = true;
    itemArray[i].addEventListener(MouseEvent.CLICK, stopAnimate);
    itemArray[i].itemAngle = Math.PI * 2 / itemArray.length * i;
    itemArray[i].addEventListener(Event.ENTER_FRAME, animate);
}

function animate(e:Event):void
{
    speed = mouseX / stage.stageWidth * rangeSpeed + minSpeed;
    e.currentTarget.x = Math.cos(e.currentTarget.itemAngle) * radiusX + centerX;
    e.currentTarget.y = Math.sin(e.currentTarget.itemAngle) * radiusY + centerY;
    e.currentTarget.itemAngle += speed;
    itemArray.sortOn("y");

    for(var i:Number = 0; i < itemArray.length; i++)
    {
        canvas.setChildIndex(itemArray[i], i);
        var pct:Number = (itemArray[i].y - minY) / rangeY;
        var scale:Number = pct * rangeScale + minScale;
        itemArray[i].scaleX = itemArray[i].scaleY = scale;
    }
}

function stopAnimate(event:MouseEvent):void
{
    for (var i:Number = 0; i < itemArray.length; i++)
    {
        itemArray[i].removeEventListener(Event.ENTER_FRAME, animate);
    }
}

アニメーションを再度有効にするには、クリック イベントを追加してボタンと言うだけで、その機能が実行されます

for (var i:Number = 0; i < itemArray.length; i++)
{
    itemArray[i].addEventListener(Event.ENTER_FRAME, animate);
}

ENTER_FRAMEのムービークリップにイベントを追加するだけですitemArray

于 2013-07-01T19:50:20.963 に答える