我的滚动计数器不是显示1-9.每十次显示一次“零”。它会播放,但是NumbersView.as第37行的代码还未完成。注意,Tweener用于显示精灵。我该怎么完成这件事?
我正在测试的 "NumbersView.as“
循环错误,onComplete,缺少参数或函数
谢谢你的帮助!
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部件”
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“工作很好”
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);
}
}
}我把它调试好了!
发布于 2010-02-18 20:49:33
我在您的代码中注意到了一些事情,所以我编辑了它,它运行得很好。
主要的问题是您的Flash库项目()不是为您使用它的方式设置的。你把数字图形放在框架上,所以我修改了它,这样电影就有了一个框架,所有的数字都放在了另一个框架上。因此,number_0.y = 0,number_1.y =120. number_2.y = 240等等(也在您的库中,"number_8.jpg“实际上是数字7)。
如果您只是做了更改,那么您的代码运行良好。不过,它确实变得越来越慢。这部分是由于推特,但主要是因为它试图更新太多。我更新了你下面的代码。
NumberDocumentClass
将incrementCounter和显示代码分开。因此,现在numbers.setTime()在enterframe上被调用(没有任何点绘制超过一次的帧,Flash不能这样做)。我还在构造函数中而不是在变量声明中启动了您的计时器(这是最佳实践)。
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)继续;)。
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,并且使用此代码,那么它应该运行得很好。
https://stackoverflow.com/questions/2290737
复制相似问题