flashactionscript-3tweener

reset, Tweener, AS3


How do I reset my numbers after they count? I want something like an onComplete function.

DESCRIPTION
My animation advances 120 pixels from it's current position, then flys off the stage. It was looping, and would yoyo to the bottom before advancing. I don't want my numbers yoyoing or flying off the stage. My numbers must move 120 pixels forward each count, then return.

alt text http://www.ashcraftband.com/myspace/videodnd/tweener___.jpg

NumbersView.as 'the code works, but in a messed up way as described'

package   
{ 
    import flash.display.DisplayObject; 
    import flash.display.MovieClip; 
    import flash.utils.Dictionary; 
    import flash.events.Event; 
    import caurina.transitions.Tweener; 

    public class NumbersView extends MovieClip 
    { 
        private var _listItems:Array; 
        private var previousNums:Array; 
        private const numHeight:int = 120; 

        public function NumbersView()  
        { 
            _listItems = new Array(); 
            previousNums = new Array(); 
   //Tweener.init();

            var item:NumberImage; 
            for (var i:Number = 0; i < 9; i++) { 
                item = new NumberImage(); 
                addChild(item); 
                item.x = i * item.width; 
                _listItems.push(item); 
            } 
        } 

        public function setTime($number:String):void { 
            var nums:Array = $number.split(""); 
            //trace("$number = " + $number);
            for (var i:Number = 0; i < nums.length; i++) { 
                if (nums[i] == previousNums[i]) continue; 
                Tweener.removeTweens(_listItems[i]);    

                //newY:int = -numHeight;
    var newY:int = int(nums[i]) * -numHeight;
    trace("newY = " + newY);
                trace("currY = " + _listItems[i].y);

    /*----------------------PROBLEM AREA, RIGHT HERE------------------------*/
                //if (_listItems[i].y < 0) _listItems[i].y = numHeight;//
                //Tweener.addTween(_listItems[i], { y:newY, time:3 } );//
    Tweener.addTween(_listItems[i], { y:_listItems[i].y+newY, time:3 } );//
            } 
            previousNums = nums; 
        } 
    } 
} 

Tweener Example
http://hosted.zeh.com.br/tweener/docs/en-us/parameters/onComplete.html

**oopse!
//crap code was' s note not to use it', not a comment against anyone's code


DOCUMENT CLASS
Publish Settings/Flash/Settings 'Advanced ActionScript 3.0 Settings'/Document class:NumbersView

CLASS Symbol 70x1080, numbers 70x120
Library/'right-click' Properties/Class:NumberImage


Solution

  • It took me a little while to figure out what you're really trying to get as an end result, but I think I figured it out. I split this functionality into 2 classes. The NumbersView class is still the document class, but I also made a NumberImage class that you can attach to your 0-9 numbers movieclip in your library. Here's the code:

    //NumbersView.as - Your Document Class
    package {
    
        import flash.display.MovieClip;
    
        public class NumbersView extends MovieClip {
    
            private var _listItems:Array; 
            private const numHeight:int = 120; 
    
            public function NumbersView()  
            { 
                _listItems = new Array();
    
                var item:NumberImage; 
                for (var i:Number = 0; i < 9; i++) { 
                    item = new NumberImage(); 
                    addChild(item); 
                    item.x = i * item.width; 
                    _listItems.push(item); 
                }
    
                setTime('123456789');
    
            }
    
            public function setTime($number:String):void { 
                var nums:Array = $number.split(""); 
                trace(nums);
    
                for (var i:Number = 0; i < nums.length; i++) { 
    
                    _listItems[i].start( int(nums[i]) );
    
                } 
    
            } 
    
    
        }
    }
    

    The next class is the NumberImage.as class that you can hook up to your movieclip by right-clicking the item in the library, "Properties...", Check "Export for ActionScript", and put in NumberImage for the Class name.

    //NumberImage.as - Linked to the NumberImage movieclip in the Library    
    package {
    
        import flash.display.MovieClip;
        import caurina.transitions.Tweener;
    
        public class NumberImage extends MovieClip {
    
            public var count:int;
    
            public function NumberImage() {
                count = 0;
            }
    
            public function start( num:int = 0 ):void {
                this.y = -120*num;
                count = num;
                moveNumbers();
            }
    
            public function moveNumbers():void {
                count++;
                if(count % 10 == 0) {
                    Tweener.addTween( this, {y: this.y + 1080, time:1, onComplete:moveNumbers});
                } else {
                    Tweener.addTween( this, {y: this.y - 120, time:1, onComplete:moveNumbers});
                }
            }
    
        }
    }
    

    Hopefully this makes more sense and it's easier to decipher now that the functionality of the NumberImage objects are handled by themselves rather than by their containing class.