索引深度动画,AS3

时间:2010-07-09 19:41:01

标签: flash actionscript-3

我有三个球。我该怎么办?

他们应该看起来像是在动画时被耍弄,但是 我没有正确索引它们。请帮忙。
感谢

修改
也许我应该只使用一个数组。 getChild是一种有效的方法,但它并没有完美地循环。它移动一个或两个球,而不是一个接一个......

//JUGGLING ANIMATION WITH 3 BALLS
var myTimer:Timer = new Timer(444);
myTimer.addEventListener(TimerEvent.TIMER,someFunction);
myTimer.start();
function someFunction(event:TimerEvent) {
var T:Number =0; 

//WHERE I'M SETTING IT WRONG
T++; 
T %= 3;
var dr:*;
dr = getChildAt(numChildren - 1);
for(var i:int; i <T; i++){
setChildIndex(dr,i);
trace(i);
}
}

输出
输出跟踪为零,动画看起来像是一次移动1个或2个球,而不是循环遍历每个。

2 个答案:

答案 0 :(得分:0)

修改

不知道你真正想要实现的目标,但只能在一次通话中改变一个索引

var depth:Number =0;

var myTimer:Timer = new Timer(444);

myTimer.addEventListener(TimerEvent.TIMER,someFunction);
myTimer.start();

function someFunction(event:TimerEvent):void {
  depth =(depth + 1) % 3;

  var dr:DisplayObject = getChildAt(numChildren - 1);

  setChildIndex(dr, depth);

  trace(depth);
}

您的T值错误,您无法在同一时间内增加和进行模数=&gt;

T = (T + 1) % 3;

T++; 
T %= 3;

并且您每次在重复的函数中也将T重置为0,将其置于函数之外:

var T:Number =0;

var myTimer:Timer = new Timer(444);
myTimer.addEventListener(TimerEvent.TIMER,someFunction);
myTimer.start();

function someFunction(event:TimerEvent):void {
  T =(T + 1) % 3;
  var dr:DisplayObject = getChildAt(numChildren - 1);
  for(var i:int=0; i <T; i++){
    setChildIndex(dr,i);
    trace(i);
  }
}
  • 您也忘了在i中设置一个值到您的循环中。
  • 你正在改变同一个循环,T倍于子索引,所以最后只有最后一个在屏幕上显示。

答案 1 :(得分:0)

你不清楚你想要达到的目标。 如果您想使用一个计时器为3个剪辑设置动画,但一次为1个剪辑设置动画,则可以尝试以下操作:

var myTimer:Timer = new Timer(444);
myTimer.addEventListener(TimerEvent.TIMER,someFunction);
myTimer.start();
function someFunction(event:TimerEvent) {
var i:int = (myTimer.currentCount - 1)%3;
var dr:DisplayObject = getChildAt(i);
setChildIndex(dr,i);
trace(i);
}
  1. 你在你的函数中声明了T,所以不会重置为0吗?然后你循环浏览多个剪辑,你想同时控制所有三个吗?目前尚不清楚。
  2. 您可以使用计时器的currentCount来获取“计时器自零开始以来已被解雇的总次数”
  3. 我知道这是一个示例/片段,但是:someFunction并没有说明你要做什么,变量名不一致(例如T),getChildAt()返回一个你可以强制转换的DisplayObject到Sprite / MovieClip,取决于使用情况,但使用*就像是不能很好地使用该语言。
  4. HTH