【问题标题】:skipping nines in counter object, AS3在计数器对象中跳过 9,AS3
【发布时间】:2010-03-18 17:00:49
【问题描述】:

一开始并不那么明显,但我的计数器跳到零并忽略了九。
我怎样才能让我的计数器不跳过九?

显示对象
它是从 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]) ); 

            }  

        }  


    } 
}

NumbersView.as 的变体与 Tweener

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

公共类扩展了电影剪辑
将“NumbersView.as”放在同一目录中


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

符号
数字列 70x1080
数字 70x120

TWEENER
本地目录中的 caurina 文件夹

【问题讨论】:

  • 我会认真放弃该代码,这太糟糕了。你是从一本书里得到的吗?这是不可能理解的,当下一个问题出现时,你是否会在每个问题得到回答后回来。我之前给你的解决方案要简单得多,而且工作得很好。我不明白您为什么不想使用更简洁、更易于调试且缺陷明显更少的东西。
  • NumbersView.as 有问题。我讨厌用这个打败一匹死马。

标签: flash actionscript-3


【解决方案1】:

我正在努力遵循您的代码并准确理解您的意思,所以这有点猜测。

在 NumbersView.as 中应该

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

是:

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

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

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

【讨论】:

  • a5 也与 a=5 不同,看看有什么区别? :)
  • 关于循环必须“小于或等于”可能是正确的,但我仍然卡住了。
  • 看起来这对您有所帮助,其余的您都想通了。很高兴你把它分类了。
【解决方案2】:

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

我有一些合理的值,所以我将它从“数字”更改为“整数”并且它起作用了。

【讨论】:

    猜你喜欢
    • 2020-12-01
    • 1970-01-01
    • 2014-01-13
    • 1970-01-01
    • 1970-01-01
    • 2014-04-30
    • 1970-01-01
    • 2014-07-11
    • 2019-10-28
    相关资源
    最近更新 更多