我的滚动计数器不显示1-9 ...每十个间隔只显示“0”。它播放,但代码在NumbersView.as的第37行未完成。注意Tweener用于显示精灵。我该如何完成?
我正在测试“NumbersView.as”
循环错误,onComplete,缺少参数或功能
- Tweener代码,第37行?
- for循环,第22行? for(var i:Number = 0; i< 9; i ++)
谢谢你的帮助!
alt text http://www.ashcraftband.com/myspace/videodnd/note3.jpg
numbers.fla
alt text http://www.ashcraftband.com/myspace/videodnd/note1.jpg alt text 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);
}
}
}
我调试了它!
答案 0 :(得分:0)
我注意到你的代码中有一些东西,所以我编辑了它,它运行正常。
主要问题是您的Flash库项目(mc-NumberImage)没有按照您使用它的方式设置。你把数字图形放在帧上,所以我修改了它,所以movieclip有一个帧,所有的数字都在彼此的顶部。所以 number_0.y = 0 , number_1.y = 120 ... number_2.y = 240 等等(也在您的图书馆中)你的“number_8.jpg”实际上是一个数字7)。
如果您只是进行了更改,那么您的代码将运行确定。它确实变得越来越慢。这部分是由于Tweener,但主要是因为它试图更新太多。我在下面更新了你的代码。
分离出 incrementCounter 和显示代码。所以现在 numbers.setTime()在 enterframe 上被调用(没有一点多次绘制一帧,Flash无法做到)。我还在构造函数中启动了Timer,而不是在变量声明中(这是最佳实践)。
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));
}
}
}
我主要编辑了setTime方法。我添加了一个记住之前数字的previousNums变量,这样我们可以用它来查看数字是否已经改变,如果没有,那么你可以跳过它( if(nums [i] == previousNums [我]继续; )。
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,并且使用此代码,那么它应该运行得非常好。