2012-04-13 2 views
1

Comment faire bouger les objets en mouvement circulaire de (startX, startY) vers (destinationX, destinationY) avec une certaine aberration en utilisant TweenLite [bibliothèque actionscript 3]?TweenLite circular movement

+0

C'est assez vague. Pouvez-vous expliquer davantage ce que vous essayez d'accomplir. Qu'avez-vous essayé? – Corey

Répondre

1

Vous devriez pouvoir définir un mouvement circulaire en utilisant le plugin CirclePath2D et peut-être décaler un peu l'emplacement avec une fonction onUpdate. Le bit qui semble confus est

de (startX, startY) à (destinationX, destinationY)

parce que si vous vous déplacez dans un mouvement circulaire, à un moment donné vous finissez où vous avez commencé à partir. si vous commencez à partir d'une position et terminez dans une autre, vous pouvez vous déplacer sur une courbe, auquel cas vous voulez jeter un oeil à la BezierThroughPlugin.

Pourtant, il est assez simple d'animer sur un chemin de cercle avec une boucle onEnterFrame et vous pouvez facilement changer le cercle en un ovale par exemple ou décaler le chemin un peu au hasard. Normalement, vous aurez besoin de convertir polaires en coordonnées cartésiennes:

x = cos(angle) * radius 
y = sin(angle) * radius 

mais la méthode de point polar() fait déjà pour vous:

var speed:Number = 0;//how fast to move around the circle 
var spread:Number = 20;//how far away from the centre 

var b:Sprite = addChild(new Sprite()) as Sprite; 
b.graphics.beginFill(0); 
b.graphics.drawCircle(-3,-3,3); 
b.graphics.endFill(); 
graphics.lineStyle(1,0xDEDEDE); 



this.addEventListener(Event.ENTER_FRAME,update); 
function update(event:Event):void{ 
    speed += .1;//update the 'angle' , .1 is the increment/speed at which b spins 
    var distance:Number = spread + (Math.random() * 10 - 5);//spread + random 'aberration' 
    var offset:Point = Point.polar(distance,speed);//convert from angle/radius to x,y 

    b.x = mouseX + offset.x; 
    b.y = mouseX + offset.y; 

    graphics.lineTo(b.x,b.y); 
}