2010-01-20 6 views
0

У меня есть этот код, который я нашел в Интернете, который делает бесконечную вращающуюся галерею, теперь моя проблема заключается в том, что при входе в фрейм он прыгает и слишком быстро. Я хочу, чтобы это было так быстро, когда вы выходите из логотипа.Как замедлить анимацию в AS3 без уменьшения fps

Вот код:

//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 »

ответ

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 ЗАПРОШЕННЫЙ:

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; 
    } 
} 
+0

спасибо, но я новичок на все это Actionscript вещь будет вы можете скопировать вставку всего кода с изменениями. Пожалуйста. –

+0

Я новичок во всей этой программе. Не могли бы вы подойти к моему дому и выполнить мою работу/домашнюю работу/проект для меня? Kthxbye –

+0

Спасибо, но есть ошибка Ошибка синтаксиса: «else» не отображается –