,我如何在数完后重新设置我的数字?,我想要一个类似onComplete函数的东西。
描述
我的动画从它当前的位置前进120像素,然后飞离舞台。它是绕着圈的,在前进之前,它会一直往下跳。我不想让我的数字在舞台上飘扬或飞舞。我的数字必须移动120像素每计数,然后返回。
.jpg
NumbersView.as‘代码工作,但方式混乱,正如所描述的’
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();
//Tweener.init();
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("");
//trace("$number = " + $number);
for (var i:Number = 0; i < nums.length; i++) {
if (nums[i] == previousNums[i]) continue;
Tweener.removeTweens(_listItems[i]);
//newY:int = -numHeight;
var newY:int = int(nums[i]) * -numHeight;
trace("newY = " + newY);
trace("currY = " + _listItems[i].y);
/*----------------------PROBLEM AREA, RIGHT HERE------------------------*/
//if (_listItems[i].y < 0) _listItems[i].y = numHeight;//
//Tweener.addTween(_listItems[i], { y:newY, time:3 } );//
Tweener.addTween(_listItems[i], { y:_listItems[i].y+newY, time:3 } );//
}
previousNums = nums;
}
}
} Tweener示例
http://hosted.zeh.com.br/tweener/docs/en-us/parameters/onComplete.html
**哎呀!
//垃圾代码是指不使用它的注释,而不是对任何人的代码的评论。
文档类
发布设置/Flash/设置‘高级ActionScript 3.0设置’/文档类:NumbersView
类符号70x1080,数字70x120
库/“右键单击”属性/类:NumberImage
发布于 2010-03-17 20:23:05
我花了一小段时间才弄明白你到底想得到什么,但我想我明白了。我将此功能分为两个类。NumbersView类仍然是document类,但我也创建了一个NumberImage类,您可以将它附加到库中的0-9数字电影。下面是代码:
//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]) );
}
}
}
}下一个类是NumberImage.as类,您可以通过右键单击库中的项“Properties.”,选中“”,并将类名放入NumberImage,从而将其连接到您的电影中。
//NumberImage.as - Linked to the NumberImage movieclip in the Library
package {
import flash.display.MovieClip;
import caurina.transitions.Tweener;
public class NumberImage extends MovieClip {
public var count:int;
public function NumberImage() {
count = 0;
}
public function start( num:int = 0 ):void {
this.y = -120*num;
count = num;
moveNumbers();
}
public function moveNumbers():void {
count++;
if(count % 10 == 0) {
Tweener.addTween( this, {y: this.y + 1080, time:1, onComplete:moveNumbers});
} else {
Tweener.addTween( this, {y: this.y - 120, time:1, onComplete:moveNumbers});
}
}
}
}希望这样做更有意义,而且现在NumberImage对象的功能是由它们自己处理的,而不是由它们包含的类来处理,所以更容易破译。
发布于 2010-03-17 20:13:37
我能从头顶上想到的最合理的解决方案是扩展包含所有数字的图像,这样它的两端都有一个9,也就是说,在8之后,图像的顶部有一个9,但是在0之前,图像的底部也有一个9。
然后,你只需要做一些测试,找出在舞台上的位置,你的形象将在每一个点的循环。当在图像的两端显示任何一个9s时,您需要知道它将位于哪个位置。然后,您只需输入一个if-语句来测试对象何时到达该位置--这意味着它显示的是顶部--最上面的9,而当该值等于true时,则使图像的位置等于底部--最多9。当您做此更改时,不使用 Tweener,因为您希望它在一个帧中快速切换到其他9个位置,因此观众不知道它的位置。
希望你能明白我的意思。您的代码让我很困惑,所以我不太确定(如果不花很长时间来理解它)您会把这个逻辑放在哪里,但我想您应该知道。
https://stackoverflow.com/questions/2464938
复制相似问题