2010-01-20 6 views
0

J'ai ce code que j'ai trouvé en ligne qui fait une galerie tournante infinie, maintenant mon problème est qu'en entrant dans le cadre il saute et trop vite. Je veux qu'il soit aussi rapide après avoir quitté le logo.Comment ralentir une animation dans AS3 sans diminuer le fps

Voici le code:

//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; 
} 
} 

et est ici le demo »

Répondre

2

La vitesse de la barre de défilement est basé sur trois choses:

1- Le frame rate. Le gestionnaire d'événements ENTER_FRAME est appelé sur chaque image, il est donc directement influencé par la fréquence d'images.

2- Le numéro d'amortissement de la vitesse. Dans votre cas, cela équivaut à 0,02. Si vous voulez ralentir le défilement, faites un plus petit nombre. Essayez 0,01 pour la moitié de la vitesse.

3- La distance du pointeur de la souris à la coordonnée du centre x de votre scène. La différence entre le pointeur de la souris et le centre de votre scène est multipliée par votre numéro d'amortissement de la vitesse. Si vous voulez que le mouvement pour arrêter lorsque vous êtes à ou autour du changement centre vous de code comme suit:

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 DEMANDÉ:

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

merci mais je suis nouveau à tout cela chose actionscript serait vous pensez copier coller le code entier avec les changements. S'il vous plaît. –

+0

Je suis nouveau à toute cette programmation. Pourriez-vous venir chez moi et faire mon travail/mes devoirs/mon projet? Kthxbye –

+0

Merci, mais il y a une erreur Erreur de syntaxe: "else" est non-respecté –