2010-01-25 6 views
0

J'ai différentes cartes, j'ai besoin de les révéler sous une forme ondulatoire, c'est-à-dire que les cartes s'ouvrent et se ferment à des moments différents de manière séquentielle et systématique.(Actionscript) Animation ondulatoire sur les objets

J'ai les cartes dans un tableau alr. Comment puis-je implémenter cette animation de la manière la plus efficace? THX!

+0

Avez-vous un exemple de ce que vous essayez de faire? "les délivre dans une forme vague" est un peu ambigu. – sberry

+0

Je voulais ouvrir 1 carte, la fermer lentement, ouvrir une autre carte, la fermer lentement ... par exemple quand j'atteins la 4ème carte, la 1ère carte est déjà fermée ... comprendre? – yeeen

Répondre

2

présumant ce que vous la signification est un stade effet « vague », essayez de définir un tableau avec un décalage, cela dépendra si vous utilisez un moteur tweening etc ou si vous utilisez une autre fonction.

La classe minuterie par exemple vous fera bien dans celui-ci:

private var t:Timer = new Timer(100, 0); 
    private var index:int = 0; 
    t.addEventListener(TimerEvent.TIMER, ping); 
    t.start(); 

    private function ping(ev:TimerEvent) { 
     if(index < waveArray.length){ 
      waveArray[index].startAnimation(); //If animated by object 
      startAnimation(waveArray[index]); //If animated by container 
      index ++; 
     } 
     else { 
      t.stop(); 
      endAnimation(); //All cards have animated 
     } 
    } 
+0

Oui, je fais référence à un effet de vague de stade. Il semble que je ne peux pas utiliser le mot «privé», je l'ai enlevé. Pourquoi if-else n'est-il pas une boucle for? – yeeen

+0

@yeeen: ces animations sont déclenchées par 'TimerEvent's ... l'utilisation d'une boucle for les déclencherait toutes en même temps, alors que l'utilisation d'une minuterie les fera démarrer les unes après les autres ... – back2dos

+0

ce que cela fait est toutes les 100ms (première valeur du constructeur Timer()) il exécute la fonction 'ping', la boucle if/else est seulement là pour arrêter le timer une fois que tous les éléments sont passés et empêcher une erreur hors plage sur le tableau. Au fur et à mesure que la variable d'index passe lentement dans le tableau, vous obtenez un décalage pour chaque animation démarrant. Fondamentalement, il s'agit d'une boucle for avec un décalage à chaque appel. – longstaff

2

Vous devriez vous familiariser avec Math.sin() et Math.cos(). Regardez dans les fonctions trigonométriques simples et mémorisez la conversion des radians et des degrés. Il y a beaucoup de trucs cool et intéressants que vous pouvez réutiliser dans différents contextes une fois que vous avez une bonne compréhension de ces concepts. L'extrait suivant montre comment déplacer un objet avec "une forme d'onde". Ce n'est peut-être pas exactement ce que vous cherchez, mais cela devrait vous aider à aller où vous voulez aller. Il est écrit dans l'AS3 en utilisant l'IDE CS4.

var n:Number = 0; 
var ball:MovieClip = new MovieClip(); 
ball.graphics.beginFill(0xFFCC00, 1); 
ball.graphics.drawCircle(0, 0, 15); 
addChild(ball); 

ball.x = stage.stageWidth; 
ball.y = stage.stageHeight * .5; 

var prev:Point = new Point(ball.x, ball.y); 

addEventListener(Event.ENTER_FRAME, onEnterFrameHanlder); 

function onEnterFrameHanlder(event:Event):void 
{ 
    n+=3; 
    ball.x = Math.cos(n * .25 * Math.PI/180) * (stage.stageWidth * .5) + (stage.stageWidth * .5); 
    ball.y = Math.sin(n * Math.PI/180) * (stage.stageHeight * .5) + (stage.stageHeight * .5); 

    graphics.lineStyle(1, 0xFFCC00); 
    graphics.moveTo(ball.x, ball.y); 
    graphics.lineTo(prev.x, prev.y); 

    prev.x = ball.x; 
    prev.y = ball.y; 
} 
+0

Merci pour l'animation intéressante, mais ce n'est pas ce que je cherche. Je voulais ouvrir 1 carte, la fermer lentement, ouvrir une autre carte, la fermer lentement ... par exemple quand j'atteins la 4ème carte, la 1ère carte est déjà fermée ... – yeeen

+2

Ce que jeremynealbrown dit c'est que tu devrais regarder Math.sin et Math.cos, qui sont très bons à utiliser pour les fonctions "wave". Essayez de changer certains paramètres pour voir ce qui se passe et vous serez probablement en mesure d'écrire ce qui convient à ce dont vous avez besoin – Antti

+0

Consultez mon autre qn connexe ici: http://stackoverflow.com/questions/2161123/move-objects-in- un effet d'onde-un-tableau-produisant-un-stade – yeeen

Questions connexes