2014-11-27 5 views
0

Так что я застрял на этом около 2 недель, и я не знаю, как прогрессировать.ReferenceError: Ошибка # 1069 Actionscript 3

У меня есть массив клипов под названием «_main.speederArray», и я пытаюсь сделать так, чтобы, если они сталкиваются друг с другом, они оба уничтожаются. Вот мой код в классе «Speeder» для обнаружения столкновения.

private function detectionHandler():void{ 
     //trace("array length", _main.speederArray.length); 
     detectionID = _main.gameCounter; 
     for (var i:int = _main.speederArray.length -1; i >= 0; i--){ 

      var speeder:Speeder = _main.speederArray[i]; 

      if(speeder.destroyMe) continue; 
      if(speeder.detectionID == this.detectionID) continue; 

      if (boxIntersect(this, speeder)){ 

        trace("collision"); 

        destroyMe = true; 
        speeder.destroyMe = true; 
      } 
     } 
    } 

Здесь приведена функция boxIntersect, к которой относится этот код. Это в том же классе

private function boxIntersect (speeder1:Speeder, speeder2:Speeder):Boolean{ 

     if(speeder1.x + speeder1.distRight < speeder2.x + speeder2.distLeft) return false; //checking for overlap on X axis 
     if(speeder1.x + speeder1.distLeft > speeder2.x + speeder2.distRight) return false; 
     if(speeder1.y + speeder1.distBot < speeder2.y + speeder2.distTop) return false; // checking for overlap on Y axis 
     if(speeder1.y + speeder1.distTop > speeder2.y + speeder2.distBot) return false; 



     return true; 

    } 

И вот здесь я думаю, что проблема в этом. У меня есть класс под названием «spawner», и именно здесь я собираюсь обрабатывать созданные и уничтоженные объекты. Вот код, в котором я пытаюсь объединить объекты из массива в зависимости от того, установлено ли значение destroyMe bool равным true. На этом этапе я смутил дерьмо из себя, поэтому любая помощь будет принята с благодарностью!

private function updateArray(e:Event):void{ 

     for(var i:int = _main.speederArray.length - 1; i>=0; i--){ 


      var speeder:Speeder = _main.speederArray[i]; 


      if(speeder.destroyMe){ 
       //trace("hello"); 
       removeChild(speeder[i]); // take it off the stage 
       _main.speederArray[i] = null; 
       _main.speederArray.splice(i, 1); //remove it from the array 
      } 

     } 


    } 

Теперь игра работает, однако, как только 2 объекта в одном массиве сталкиваются, я получаю след столкновения в окне вывода, но сразу после того, как я получаю это:

ReferenceError: Error # 1069 : Свойство 1 не найдено на com.game.Speeder и нет значения по умолчанию. на com.game::Spawner/updateArray()

Понятия не имею, что это значит :(

Любая помощь оценили спасибо, ребята!

ответ

0

Проблема исходит от линии removeChild(speeder[i]); внутри вашей функции обновления. Speeder не имеет свойств, которые называются 1 и 1 приходит, очевидно, из вашего для петли.

Таким образом, чтобы решить эту проблему, вы должны просто вызвать

removeChild(speeder);

speeder уже является объектом в положении i вашего массива. Помещение [] позади объекта аналогично доступу к нему из свойства. по существу, вы делали это:

removeChild(speeder.1);

+0

Огромное спасибо, я люблю тебя <3 –

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