重置,Tweener,AS3

时间:2010-03-17 18:40:32

标签: flash actionscript-3 tweener

如何计算数字后重置数字?我想要像onComplete函数一样。

描述
我的动画从它的当前位置前进120像素,然后飞离舞台。 它正在循环,并且在推进之前会yoyo到底部。我不想要我的号码 yoyoing或飞离舞台。那么我的数字必须向前移动120个像素 返回。

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

NumbersView.as'代码可以工作,但是按照'

所描述的方式搞错了
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示例
http://hosted.zeh.com.br/tweener/docs/en-us/parameters/onComplete.html

** oopse!
// crap code 是不要使用它的注释,而不是对任何人的代码的评论


文档类
发布设置/ Flash /设置'高级ActionScript 3.0设置'/文档类:NumbersView

CLASS 符号70x1080,数字70x120
Library /'右键单击'属性/类:NumberImage

2 个答案:

答案 0 :(得分:0)

我能想到的最合乎逻辑的解决方案是扩展包含所有数字的图像,使其每端都有一个9,即:在8之后,在顶端有一个9图像,但在0之前,图像底部还有一个9。

然后你只需要做一些测试,找出你的图像在它周期的每个点上在舞台上的位置。您需要知道在图像的任何一端显示9s的 时的位置。然后你只需输入一个if语句来测试对象何时到达位置,这意味着它显示最顶层的9,当它等于true时,使图像的位置等于最底层的9.当你做这个改变时,不要使用 Tweener,因为你希望它在一帧中向下捕捉到另一个9位置,所以观众不知道它。

希望你能看到我在说什么。你的代码让我感到困惑,所以我不确定(不花太多时间试图理解它)你把这个逻辑放在哪里,但我想你已经知道了。

答案 1 :(得分:0)

我花了一点时间才弄清楚你最终想要得到什么,但我想我已经明白了。我将此功能分为两类。 NumbersView类仍然是文档类,但我还创建了一个NumberImage类,您可以将其附加到库中的0-9数字movieclip。这是代码:

//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]) );

            } 

        } 


    }
}

下一个类是NumberImage.as类,您可以通过右键单击库中的项目“Properties ...”,选中“Export for ActionScript”,然后输入NumberImage来连接到您的movieclip。班级名称。

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

    }
}

希望这更有意义,因为NumberImage对象的功能由它们自己处理而不是由它们包含的类处理,所以更容易破译。