代码之家  ›  专栏  ›  技术社区  ›  anon255058

索引深度动画,AS3

  •  0
  • anon255058  · 技术社区  · 16 年前

    它们应该看起来像是在变戏法,但 我没有正确地索引它们。请帮忙。
    谢谢

    编辑
    也许我应该用数组。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个球,而不是在每个球之间循环。

    2 回复  |  直到 16 年前
        1
  •  0
  •   Patrick    16 年前

    编辑:

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

    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 + 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乘以子索引,因此最后只有最后一个集合在屏幕上可见。
        2
  •  0
  •   George Profenza    16 年前

    你不太清楚你想达到什么目的。 如果要使用一个计时器设置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,但是使用*这样的语言并不是一个好的用法。

    HTH公司