首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >重置,Tweener,AS3

重置,Tweener,AS3
EN

Stack Overflow用户
提问于 2010-03-17 18:40:32
回答 2查看 990关注 0票数 0

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

描述

我的动画从它当前的位置前进120像素,然后飞离舞台。它是绕着圈的,在前进之前,它会一直往下跳。我不想让我的数字在舞台上飘扬或飞舞。我的数字必须移动120像素每计数,然后返回。

.jpg

NumbersView.as‘代码工作,但方式混乱,正如所描述的’

代码语言:javascript
复制
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/设置‘高级ActionScript 3.0设置’/文档类:NumbersView

符号70x1080,数字70x120

库/“右键单击”属性/类:NumberImage

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-03-17 20:23:05

我花了一小段时间才弄明白你到底想得到什么,但我想我明白了。我将此功能分为两个类。NumbersView类仍然是document类,但我也创建了一个NumberImage类,您可以将它附加到库中的0-9数字电影。下面是代码:

代码语言:javascript
复制
//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.”,选中“”,并将类名放入NumberImage,从而将其连接到您的电影中。

代码语言:javascript
复制
//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对象的功能是由它们自己处理的,而不是由它们包含的类来处理,所以更容易破译。

票数 0
EN

Stack Overflow用户

发布于 2010-03-17 20:13:37

我能从头顶上想到的最合理的解决方案是扩展包含所有数字的图像,这样它的两端都有一个9,也就是说,在8之后,图像的顶部有一个9,但是在0之前,图像的底部也有一个9。

然后,你只需要做一些测试,找出在舞台上的位置,你的形象将在每一个点的循环。当在图像的两端显示任何一个9s时,您需要知道它将位于哪个位置。然后,您只需输入一个if-语句来测试对象何时到达该位置--这意味着它显示的是顶部--最上面的9,而当该值等于true时,则使图像的位置等于底部--最多9。当您做此更改时,不使用 Tweener,因为您希望它在一个帧中快速切换到其他9个位置,因此观众不知道它的位置。

希望你能明白我的意思。您的代码让我很困惑,所以我不太确定(如果不花很长时间来理解它)您会把这个逻辑放在哪里,但我想您应该知道。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2464938

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档