【问题标题】:reset, Tweener, AS3重置, 补间, AS3
【发布时间】:2010-03-17 18:40:32
【问题描述】:

我如何在计数后重置我的数字?我想要一个类似 onComplete 函数的东西。

描述
我的动画从当前位置前进 120 像素,然后飞离舞台。 它在循环,在前进之前会悠悠球到底部。我不想要我的号码 溜溜球或飞离舞台。我的数字每次计数必须向前移动 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

**哎呀!
//废话是注意不要使用它',不是针对任何人的代码的评论


文档类
发布设置/Flash/Settings 'Advanced ActionScript 3.0 Settings'/文档类:NumbersView

CLASS 符号 70x1080,数字 70x120
Library/'right-click' Properties/Class:NumberImage

【问题讨论】:

  • 我不是已经向您发布了一些正是做到这一点的代码吗?在我给你的例子中,数字在 9 之后重置为 0;它与您在这里所做的不同,但它也没有那么复杂。
  • NumbersView 文档给我带来了麻烦,但我没有认真地看待它。除了我的补间,我一切正常。

标签: flash actionscript-3 tweener


【解决方案1】:

我花了一点时间才弄清楚你真正想要得到什么作为最终结果,但我想我明白了。我将此功能分为 2 个类。 NumbersView 类仍然是文档类,但我还创建了一个 NumberImage 类,您可以将其附加到库中的 0-9 数字影片剪辑中。代码如下:

//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 放入类名。

//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 对象的功能是由它们自己而不是由它们的包含类来处理的。

【讨论】:

  • 另外,感谢您对 XML 的帮助。
  • 好主意。课程安排得很好。你让我思考!无论如何,“文档类”前进,“类”滚动数字。我的动画需要为复杂的动作扩展我的类。谢谢。
【解决方案2】:

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

然后你只需要做一些测试来找出你的图像在它循环的每个点上的舞台位置。您需要知道在图像的任一端显示 either 的 9 时它将处于的位置。然后,您只需输入一个 if 语句来测试对象何时到达该位置,这意味着它正在显示最顶部的 9,当它等于 true 时,使图像的位置等于最底部的 9。当您执行此更改时, 不要使用 Tweener,因为您希望它向下捕捉到一帧中的其他 9 个位置,因此观看者不会注意到它。

希望你明白我在说什么。你的代码让我很困惑,所以我不太确定(不用花太长时间去理解它)你会把这个逻辑放在哪里,但我想你会知道的。

【讨论】:

    猜你喜欢
    • 2011-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-01
    • 1970-01-01
    • 2013-02-03
    相关资源
    最近更新 更多