Search code examples
actionscript-3flashanimationtweengsap

Tweening Sprite size using GreenSock in AS3


I've seen examples where it's possible to tween a rectangle using scaleX, but I can't find anything that tweens a circle. (The "circle" that I'm drawing is actually a donut shape and I want the outside circle to be the one that is tweened).

var resizeVar:Number = 75;

myCircle.graphics.drawCircle((myCircle.width/2), (myCircle.height/2), resizeVar);
myCircle.graphics.drawCircle((myCircle.width/2), (myCircle.height/2), 75);

I tried doing it this way, but this throws lots of errors. I don't think it's possible this way:

TweenMax.to(myCircle, 2, {resizeVar:150, ease:SlowMo.ease.config(1, 0)});

Normally with display objects, it is done this way. It doesn't work with this "donut" though:

TweenMax.to(myRectangle, 2, {scaleX:1.5, scaleY:1.5 ease:SlowMo.ease.config(1, 0)});

So my question is, how can I tween the radius size of my outside circle?

EDIT: This is how the donut is being drawn, so the resizeVar needs to change from 75 to 150.

var myCircle:Sprite = new Sprite();

myCircle.graphics.beginFill(0xbbbbbb);
myCircle.graphics.drawCircle(0, 0, 150); // this is what should be tweening/scaling
myCircle.graphics.drawCircle(0, 0, 75); // this should stay the same
myCircle.graphics.endFill();

addChild(myCircle);

Solution

  • You should be able to tween the scaleX and scaleY properties of ANY displayObject:

    var radius:Number = 75;
    var myCircle:Sprite = new Sprite();
    myCircle.graphics.beginFill(0);
    myCircle.graphics.drawCircle(radius/2, radius/2, radius);
    myCircle.graphics.endFill();
    addChild(myCircle);
    
    TweenMax.to(myCircle, 2, {scaleX:2, scaleY:2, ease:SlowMo.ease.config(1,0)});
    

    EDIT

    This is how you would scale just the outside of the donut:

    var resizeObject:Object = { innerRadius:75, outerRadius:150 };
    myCircle = new Sprite();
    myCircle.graphics.beginFill(0xbbbbbb);
    myCircle.graphics.drawCircle(0, 0, resizeObject.outerRadius);
    myCircle.graphics.drawCircle(0, 0, resizeObject.innerRadius);
    myCircle.graphics.endFill();
    
    addChild(myCircle);    
    TweenMax.to(resizeObject, 2, {outerRadius:300, ease:SlowMo.ease.config(1,0), onUpdate:updateCircle, onUpdateParams:[resizeObject]});
    
    
    function updateCircle(resizeObject:Object):void 
    {
        myCircle.graphics.clear();
        myCircle.graphics.beginFill(0xbbbbbb);
        myCircle.graphics.drawCircle(0, 0, resizeObject.outerRadius);
        myCircle.graphics.drawCircle(0, 0, resizeObject.innerRadius);
        myCircle.graphics.endFill();
    }