2015-12-04 10 views
0

У меня есть следующая проблема. Был бы признателен, если кто-то приложит все усилия, чтобы ответить на него.ActionScript Как получить доступ к детям Спрайты

Описание проблемы: У меня есть верхний уровень Sprite «TopLevel», есть Sprite под ним «allRoutes», есть ребенок Sprite под ним «Маршруты» и есть еще один ребенок под ним «Маршрут».

Я хочу получить доступ к каждому уровню в цикле. Я попытался сделать это в ActionScript, но не с успехом.

Вот вероятный код (он не компилируется успешно):

package 
{ 
    import flash.display.Sprite; 

    public class TopLevel extends Sprite { 
     public function TopLevel() { 
      var allRoutes:Sprite = new Sprite(); 
      for (i = 0; i < 3; i++) { 
       var routes:Sprite = new Sprite(); 
       for (j = 0; j < 4; j++) { 
        var route:Sprite = new Sprite(); 
        route.name = "Route:" + i + ", " j; 
        routes.addChild(route); 
       } 
       routes.name = "Routes:" + i; 
       allRoutes.name = "AllRoutes"; 
       allRoutes.addChild(routes); 
      } 
      addChild(allRoutes); 

      trace (allRoutes.name); 
      for (i = 0; i < allRoutes.numChildren; i++) { 
       trace(allRoutes.getChildAt(i).name); 
       for (j = 0; j < allRoutes.getChildAt(i).numChildren; j++) { 
        trace(allRoutes.getChildAt(i).getChildAt(j).name); 
       } 
      } 
     } 
    } 
} 

Я ожидаю следующий результат:

AllRoutes

Маршруты-1

Route-1 , 1

Маршрут-1, 2

Route-1, 3

Route-1, 4

Маршруты-2

Route-2, 1

Route-2, 2

Route-2, 3

Маршрут-2, 4

и так далее.

Надеюсь, что вы получите картину. Спасибо вам большое заблаговременно.

спасибо и привет

rr23850

+0

Ошибка компиляции, которую я получаю: Второй уровень getChildAt() не работает. Он обрабатывает внутренний спрайт как DisplayObject. Теперь вся функция в DisplayObject отличается от Sprite, так как у нее нет getChildAt или numChildren. Каков выход. – RR23850

+0

Вы говорите «под ним», это не то же самое, что «внутри него», что это такое? – BotMaster

ответ

0

Глобально ваш код отлично, за исключением некоторых мелочей:

  • Вы забыли объявить i и j переменные:
 
var i:int, j:int; 
  • Вы забыли оператор конкатенации перед тем j в этой строке:
 
route.name = "Route:" + i + ", " + j; 
  • Если ваш компилируете с strict mode, эти инструкции будут вести огонь ошибки:
 
allRoutes.getChildAt(i).numChildren 

и

 
allRoutes.getChildAt(i).getChildAt(j).name 

, который может быть в таком случае:

 
for (j = 0; j < Sprite(allRoutes.getChildAt(i)).numChildren; j++) 
{ 
    trace(Sprite(allRoutes.getChildAt(i)).getChildAt(j).name); 
} 

...

И как ваши for петли начинают по 0, вы получите что-то вроде этого:

 
AllRoutes 
Routes:0 
Route:0, 0 
Route:0, 1 
Route:0, 2 
Route:0, 3 
Routes:1 
Route:1, 0 
Route:1, 1 
... 

Надежда, что может помочь.

+0

thanks akmozo, Ваши комментарии работали. Спрайт() сделал магию. – RR23850

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