首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Flash和Tweener as3中的计数器

Flash和Tweener as3中的计数器
EN

Stack Overflow用户
提问于 2010-02-18 17:30:23
回答 1查看 1K关注 0票数 0

我的滚动计数器不是显示1-9.每十次显示一次“零”。它会播放,但是NumbersView.as第37行的代码还未完成。注意,Tweener用于显示精灵。我该怎么完成这件事?

我正在测试的 "NumbersView.as“

循环错误,onComplete,缺少参数或函数

  • Tweener代码第37行?
  • 循环,第22行?for (var i:Number = 0;i< 9;i++)

谢谢你的帮助!

alt文本http://www.ashcraftband.com/myspace/videodnd/note3.jpg

numbers.fla

alt文本http://www.ashcraftband.com/myspace/videodnd/note1.jpg alt文本http://www.ashcraftband.com/myspace/videodnd/note2.jpg

NumbersView.as“见向底部的Tweener部件”

代码语言: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 = new Array();


  public function NumbersView() 
  {
   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("");
   for (var i:Number = 0; i < nums.length; i++) {
    if (int(nums[i]) == 0) {
     Tweener.removeTweens(_listItems[i].moveableNumber_mc);
     if (_listItems[i].moveableNumber_mc.y < 0) {
      _listItems[i].moveableNumber_mc.y = 120;
     }
     Tweener.addTween(_listItems[i].moveableNumber_mc, { y: 0, time:.3 } );
    } else {
     Tweener.addTween(_listItems[i].moveableNumber_mc, { y: -120 * int(nums[i]), time:.3} );
    }
   }
  }
 }

}

NumberDocumentClass.as“工作很好”

代码语言:javascript
复制
package {
 import flash.display.Sprite;
 import flash.utils.Timer;
 import flash.events.TimerEvent;

 public class NumberDocumentClass extends Sprite {

  private var timer:Timer = new Timer(10);
  private var count:int = 0;
  private var fcount:int = 0;
  private var numbers:NumbersView;

  public function NumberDocumentClass() {
   timer.addEventListener(TimerEvent.TIMER, incrementCounter);    
   timer.start();   
   numbers = new NumbersView();
   addChild(numbers);
  }

  function incrementCounter(event:TimerEvent) {    
   count++;    
   fcount=int(count*count/1000);//starts out slow... then speeds up   
   numbers.setTime(formatCount(fcount));
  }  

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

我把它调试好了!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-02-18 20:49:33

我在您的代码中注意到了一些事情,所以我编辑了它,它运行得很好。

主要的问题是您的Flash库项目()不是为您使用它的方式设置的。你把数字图形放在框架上,所以我修改了它,这样电影就有了一个框架,所有的数字都放在了另一个框架上。因此,number_0.y = 0number_1.y =120. number_2.y = 240等等(也在您的库中,"number_8.jpg“实际上是数字7)。

如果您只是做了更改,那么您的代码运行良好。不过,它确实变得越来越慢。这部分是由于推特,但主要是因为它试图更新太多。我更新了你下面的代码。

NumberDocumentClass

将incrementCounter和显示代码分开。因此,现在numbers.setTime()在enterframe上被调用(没有任何点绘制超过一次的帧,Flash不能这样做)。我还在构造函数中而不是在变量声明中启动了您的计时器(这是最佳实践)。

代码语言:javascript
复制
package {
    import flash.display.Sprite;
    import flash.events.Event;
    import flash.utils.Timer;
    import flash.events.TimerEvent;

    public class NumberDocumentClass extends Sprite {

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

        public function NumberDocumentClass() {
            timer = new Timer(10);
            timer.addEventListener(TimerEvent.TIMER, incrementCounter);    
            timer.start();   
            numbers = new NumbersView();
            addChild(numbers);

            addEventListener(Event.ENTER_FRAME, enterFrameHandler);
        }

        private function incrementCounter(event:TimerEvent) {    
            count++;    
            fcount=int(count*count/1000);//starts out slow... then speeds up
        }

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

        private function enterFrameHandler(e:Event):void 
        {
            numbers.setTime(formatCount(fcount));
        }
    }
}

NumberView

我主要编辑了setTime方法。我添加了一个previousNums变量来记住前面的数字,这样我们就可以使用它来查看一个数字是否已经改变,如果它没有改变,那么您可以跳过它(如果(numsi == previousNumsi)继续;)。

代码语言: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();

            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("");

            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:.1 } );
            }
            previousNums = nums;
        }
    }
}

因此,如果您用垂直对齐的数字图形设置FLA,并且使用此代码,那么它应该运行得很好。

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

https://stackoverflow.com/questions/2290737

复制
相关文章

相似问题

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