【问题标题】:Advance from current position, Tweener, AS3从当前位置前进,Tweener,AS3
【发布时间】:2010-03-17 15:43:49
【问题描述】:

我希望我的动画每次前进 120 像素。相反,我的动画回到底部,而不是从它的新位置前进。它假设一个新的位置,但总是先回到底部。 如何让我的动画每次都从当前位置前进?

目标
我希望我的动画从当前的新位置前进 120 像素,并在十点后重复。

问题
在前进之前,动画每次都会重置到底部。如果这是 Tweener 问题,我如何设置循环或其他不相关的问题,我不会。如果您能给我一个如何修改此代码的示例,我将不胜感激。

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);                
                if (_listItems[i].y < 0) _listItems[i].y = numHeight; 
                Tweener.addTween(_listItems[i], { y:newY, time:3 } ); 
            } 
            previousNums = nums; 
        } 
    } 
} 

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

补间 http://hosted.zeh.com.br/tweener/docs/en-us/

【问题讨论】:

    标签: flash actionscript-3 tweener


    【解决方案1】:

    我有点能够让您的代码为项目设置动画,并且我看到每次为项目设置动画时,它们都会在其位置重新启动,这是我为使它们从当前位置向上移动而进行的更改:

    原文:

    if (_listItems[i].y < 0) _listItems[i].y = numHeight;
    Tweener.addTween(_listItems[i], { y:newY, time:3 } ); 
    

    改为:

    //if (_listItems[i].y < 0) _listItems[i].y = numHeight; //get rid of this line
    Tweener.addTween(_listItems[i], { y:_listItems[i].y+newY, time:3 } ); 
    

    对于循环部分,您可以使用计时器,这是我为您整理的示例。它可能并不完美,但希望能给你一个关于你想要它做什么的想法:

    package   
    { 
        import flash.display.DisplayObject; 
        import flash.display.MovieClip; 
        import flash.utils.Dictionary; 
        import flash.events.Event; 
        import flash.events.TimerEvent;
        import caurina.transitions.Tweener; 
        import flash.utils.Timer;
    
    public class NumbersView extends MovieClip 
    { 
        private var _listItems:Array; 
        private var previousNums:Array; 
        private const numHeight:int = 120; 
        var t:Timer;
    
        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); 
            }
    
            t = new Timer( 1000 ) //1000ms = 1 second intervals
            t.addEventListener(TimerEvent.TIMER, onTimer);
            t.start();
    
        } 
    
        public function onTimer( e:TimerEvent):void {
    
            //this will run every 10th time firing
            if( t.currentCount % 10 == 0 ) {
                //do something to reset the listItems
                for (var i:Number = 0; i < _listItems.length; i++) { 
                    _listItems[i].y = numHeight;
                }
            }
    
            //do your setTime function, I just randomly called it with random numbers
            setTime(Math.round(Math.random()*234567).toString());
        }
    
        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);                
    
                Tweener.addTween(_listItems[i], { y:_listItems[i].y+newY, time:3 } ); 
            } 
            previousNums = nums; 
        } 
    } 
    }
    

    【讨论】:

    • 回答 Tweener 问题!任何想法如何让它循环。我认为我的问题并不清楚
    • 您可以使用 onComplete 参数通过将起始位置传递给您用来启动补间的函数,然后在补间已完成。
    猜你喜欢
    • 2016-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-07
    相关资源
    最近更新 更多