2013-09-24 1 views
0

Мне интересно, есть ли простой способ заставить всех детей одновременно что-то делать. В частности, я хочу, чтобы все на моей сцене дрожало, как землетрясение. Трудно выделить все на сцене и добавить правильный код, потому что в данный момент я не всегда знаю количество детей на сцене.Сделать все дети чем-то ...?

Кроме того, я не уверен, что это имеет значение, но иногда, когда я добавляю что-то, я не ухожу, чтобы добавить его на сцену ... Как на несколько кнопок я буду сделать this.addChild(mybutton). Я не знаю, есть ли способ получить доступ ко всему, что было addChilded, даже если я, возможно, не добавил их прямо на сцену? Я уверен, что numChildren возвращает значение числа объектов на экране, но я могу ошибаться ...

я думал сделать что-то вроде

Внутри моей петли

if (numChildren >= 10 && nukeShakeTimer.currentCount == 0) 
{ 
    nukeShakeTimer.start(); 
} 
if (nukeShakeTimer.currentCount > 0) 
{ 
    NukeShake(); 
} 

NukeShake

public function NukeShake():void 
    { 
     numberChildren = numChildren; 
     trace(numberChildren); 
     while (numberChildren > 0) 
     { 
      var tempObject:Object = getChildAt(numberChildren) 
      if (nukeShakeTimer.currentCount % 2 == 1) 
      { 
       tempObject.x += 10; 
      } 
      if (nukeShakeTimer.currentCount % 2 == 0) 
      { 
       tempObject.x -= 10; 
      } 
      numberChildren -= 1; 
     } 
     if (nukeShakeTimer.currentCount > 30) 
     { 
      nukeShakeTimer.reset(); 
     } 
    } 

Когда я пытаюсь Тхи s, однако, я получаю ошибку времени выполнения для строки var tempObject:Object = getChildAt(numberChildren), и ошибка читается RangeError: Error # 2006: предоставленный индекс выходит за пределы.

Также я чувствую, что это возможно сделать эту операцию намного быстрее, не используя цикл while, но, возможно, нет. Помогите пожалуйста, спасибо!

+1

попробуйте это: 'var tempObject: Object = getChildAt (numberChildren-1)' – Cherniv

+0

Ах да, как я этого не понял? -0- – spaderdabomb

+0

Первый комментарий правильный, следует отметить, что причина в том, что список отображения индекс начинается с 0 и заканчивается на numChildren-1. – prototypical

ответ

1

Если вы хотите обратиться к каждому ребенку на сцене, вам необходимо пройти через них. Как говорит Чернов, изменение вашего звонка getChildAt для использования numberChildren-1 должно решить вашу проблему.

Не имеет значения, все ли непосредственно на сцене или нет. Пройдя через сцену, дети получат вам любой контейнер, в который вы добавили объекты. Перемещение этого контейнера также перемещает своих детей. (Хотя вам придется делать больше работы, если вам нужно переместить этих детей самостоятельно).

Но ...
В вашем конкретном случае, это выглядит, как вы просто хотите, чтобы встряхнуть все на экране вместе, в том же направлении с той же скоростью. В этом случае я, вероятно, просто добавлю все свои объекты в один контейнер Sprite на сцене. Затем, когда вы хотите сделать эффект встряхивания, вам нужно только перемещать один объект-контейнер, и все перемещается вместе.

+0

Хорошо спасибо, на самом деле я думаю, что контейнер объектов - намного лучший метод. Оказывается, есть одна вещь, которую я не хочу трясти, поэтому я думаю, что создание контейнера без нее было бы лучше =) – spaderdabomb

 Смежные вопросы

  • Нет связанных вопросов^_^