您好我通过互联网搜索创建了一个flash 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我想通过点击图层上的一个元素来停止旋转木马,但我不知道怎么做到这一点!有人可以帮帮我吗?
Regards`
答案 0 :(得分: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