如何在不降低fps的情况下减慢AS3中的动画速度

时间:2010-01-20 16:15:14

标签: actionscript-3 flash-cs4 flash-cs3 tween

我有这个代码,我在网上发现了一个无限旋转的画廊,现在我的问题是在输入框架上它跳得太快。我希望它在你徘徊在徽标之后快速。

以下是代码:

//Import TweenMax
import com.greensock.TweenMax;

//Save the horizontal center
var centerX:Number = stage.stageWidth / 2;

//Save the width of the whole gallery
var galleryWidth:Number = infiniteGallery.width;

//Speed of the movement (calculated by the mouse position in the moveGallery() function)
var speed:Number = 0;

//Add an ENTER_FRAME listener for the animation
addEventListener(Event.ENTER_FRAME, moveGallery);

function moveGallery(e:Event):void {

 //Calculate the new speed
 speed = -(0.02 * (mouseX - centerX));

 //Update the x coordinate
 infiniteGallery.x+=speed;

 //Check if we are too far on the right (no more stuff on the left edge)
 if (infiniteGallery.x>0) {

  //Update the gallery's coordinates
  infiniteGallery.x= (-galleryWidth/2);
 }

 //Check if we are too far on the left (no more stuff on the right edge)
 if (infiniteGallery.x<(-galleryWidth/2)) {

  //Update the gallery's coordinates
  infiniteGallery.x=0;
 }
}

这是demo »

1 个答案:

答案 0 :(得分:2)

滚动条的速度基于三件事:

1-帧速率。每帧都会调用ENTER_FRAME事件处理程序,因此直接受帧速率的影响。

2-速度阻尼数。在你的情况下,这等于0.02。如果您想减慢滚动速度,请将其设为较小的数字。尝试0.01的速度一半。

3-鼠标指针到舞台中心x坐标的距离。鼠标指针和舞台中心之间的差异乘以速度阻尼数。如果您希望当您在中心或周围时移动停止,则按如下方式进行编码:

var buffer:Number = 50;

function moveGallery(e:Event):void {
    var diff = mouseX - centerX;
    if (Math.abs(diff) > buffer) 
        speed = -(0.02 * (diff + (diff > 0 ? -buffer : buffer)));
    else
        speed = 0;

AS REQUESTED:

var centerX:Number = stage.stageWidth / 2;
var galleryWidth:Number = infiniteGallery.width;
var speed:Number = 0;
addEventListener(Event.ENTER_FRAME, moveGallery);

var buffer:Number = 100;

function moveGallery(e:Event):void {
    var diff = mouseX - centerX;
    if (Math.abs(diff) > buffer) 
        speed = -(0.02 * (diff + (diff > 0 ? -buffer : buffer)));
    else
        speed = 0;

    infiniteGallery.x += speed;

    if (infiniteGallery.x>0) {
        infiniteGallery.x = -galleryWidth / 2;
    }

    if (infiniteGallery.x < -galleryWidth / 2) {
        infiniteGallery.x = 0;
    }
}