анимация глубины индексации, AS3 - PullRequest
0 голосов
/ 09 июля 2010

У меня три мяча. Что мне делать?

Они должны выглядеть так, как будто их манипулируют при анимации, но Я не правильно их индексирую. Пожалуйста, помогите.
Спасибо

Редактировать
Может быть, я должен просто использовать массив. 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 голосов
/ 09 июля 2010

Вам не очень понятно, чего вы пытаетесь достичь. Если вы хотите анимировать 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. Я понимаю, что это образец / фрагмент, но: someFunction не говорит много о том, что вы пытаетесь сделать, имена переменных не согласованы (например, T), getChildAt () возвращает DisplayObject, который вы можете привести в Sprite / MovieClip, в зависимости от использования, но использование * подобным образом не является хорошим использованием языка.

НТН

0 голосов
/ 09 июля 2010

Изменить:

Не знаю, чего вы действительно хотите достичь, но измените только один индекс за один звонок

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 раз дочерний индекс, так что в конце на вашем экране будет виден только последний набор.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...