跳过反对象中的9,AS3

时间:2010-03-18 17:00:49

标签: flash actionscript-3

一开始并不明显,但我的计数器跳过零并忽略了9。如何让我的计数器不跳过9?

显示对象
这是一个从0-9下降的列。 '除跳过'

外,对象和值显示正确

我的FLA

import flash.display.Sprite; 
import flash.events.Event; 
import flash.utils.Timer; 
import flash.events.TimerEvent; 

var timer:Timer; 
var count:int = 0; 
var fcount:int = 0; 
var numbers:NumbersView; 

trace("-----new NumberDocument created");
timer = new Timer(10); 
timer.addEventListener(TimerEvent.TIMER, incrementCounter);     
timer.start();    
numbers = new NumbersView(); 
addChild(numbers); 

addEventListener(Event.ENTER_FRAME, enterFrameHandler);
//addEventListener(Event.ADDED_TO_STAGE, traceMeOut);


function incrementCounter(event:TimerEvent) 
{     
    count++;     
    fcount=int(count*count/1000); 
} 

function formatCount(i:int):String 
{    
    return ("000000000" + i).substr(-9, 9); 
} 

function enterFrameHandler(e:Event):void  
{ 
    numbers.setTime(formatCount(fcount)); 
} 
function traceMeOut()
{
    trace("-----Im here on stage!");
}

NumbersView.as

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

            }  

        }  


    } 
}

使用Tweener

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

            var nuNum:int = int(nums[i]);
            var nuY:int = nuNum == 0 ? 0 : (nuNum - 1) * -numHeight;

            trace("nuY = " + nuY);
            trace("cY = " + _listItems[i].y);

            Tweener.addTween(_listItems[i], { y:nuY, time:0 } );
        } 
        previousNums = nums; 
    } 

NumbersView.as 的变化,不会跳过9,但会从每个计数的底部重置

    //...SNIPPET 
    public function setTime($number:String):void { 
        var nums:Array = $number.split(""); 

        for (var i:Number = 0; i < nums.length; i++) { 
        if (nums[i] == previousNums[i]) continue; 
            Tweener.removeTweens(_listItems[i]); 

        var newY:int = int(nums[i]) * -numHeight; 
        if (_listItems[i].y < 0) _listItems[i].y = numHeight; 
            Tweener.addTween(_listItems[i], { y:newY, time:3 } ); 
        } 
        previousNums = nums; 
    }

PUBLIC CLASS 扩展了MovieClip
将'NumbersView.as'放在同一目录中


库/'右键单击'属性/类:NumberImage

SYMBOL
编号栏70x1080
数字70x120

中间人
本地目录中的caurina文件夹

2 个答案:

答案 0 :(得分:1)

我正在努力遵循你的代码并确切地理解你的意思,所以这是一个猜测。

在NumbersView.as中

(var i:Number = 0; i < 9; i++)

是:

(var i:Number = 0; i <= 9; i++)

第一个将通过数字0到8,更改将通过数字0到9。

但是我可能错过了你试图解释的那一点。

答案 1 :(得分:0)

跳伞9解决方案
一个。 补间设置太高'我设置为.05,而不是三个 湾数字= 0;我&lt; = 9;来自理查德的好建议 C。 将数值更改为整数 var numnum:int = 0; //数字

我有一些理性的值,所以我将它从'Number'更改为'int'并且它有效。