【问题标题】:indexing depth animation, AS3索引深度动画,AS3
【发布时间】:2010-07-09 19:41:01
【问题描述】:

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

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

编辑
也许我应该只使用一个数组。 getChildAt 有点工作,但它并没有完美地循环。它移动一两个球,而不是一个接一个...

//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 个球,而不是循环遍历每个球。

【问题讨论】:

    标签: flash actionscript-3


    【解决方案1】:

    编辑:

    不知道你真正想要实现什么,但一次调用中只更改一个索引

    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 值是错误的,你不能同时增加和做模=>

    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 乘以子索引,因此最后只有最后一组会在您的屏幕上可见。

    【讨论】:

    • 对不起,这很混乱。我试过了,它仍然以同样的方式制作动画。我正在尝试学习 for 循环和索引。
    【解决方案2】:

    您不太清楚自己要达到的目标。 如果您想使用一个计时器为 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. 您可以使用 Timer 的 currentCount 来获取“计时器从零开始以来触发的总次数”
    3. 我知道这是一个示例/sn-p,但是:someFunction 没有说明您要执行的操作,变量名称不一致(例如 T),getChildAt() 返回一个 DisplayObject,您可以转换为 Sprite/MovieClip,具体取决于使用情况,但像这样使用 * 并不是一种很好的语言用法。

    HTH

    【讨论】:

    • 它们是舞台上的实例 "r" "g" "b" 我正在为 z 深度设置动画。我想将 getChildAt 发送到堆栈的顶部或底部。
    猜你喜欢
    • 1970-01-01
    • 2011-08-23
    • 2014-03-25
    • 1970-01-01
    • 1970-01-01
    • 2013-05-03
    • 2015-09-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多