2017-02-13 2 views
0

Ошибка # 1009: Не удается получить доступ к свойству или методу ссылки на нулевой объект. в MethodInfo-10(). Я получаю эту ошибку при запуске этого кода. Может кто-нибудь, пожалуйста, скажите мне, что я делаю неправильно. Он не показывает мне, где ошибка, и строка ошибки. ThanksОшибка Action Script 3.0

package 
{ 
    import flash.events.MouseEvent; 
    import flash.display.MovieClip; 
    import flash.events.KeyboardEvent; 
    import flash.ui.Keyboard; 
    public class Main extends MovieClip 
    { 
     public function Main() 
     { 
      stop(); 
      start_btn.addEventListener(MouseEvent.CLICK, gothere); 
      function gothere(clickInfo:MouseEvent) 
      { 
       start_btn.removeEventListener(MouseEvent.CLICK, gothere); 
       nextFrame(); 
      } 

      stage.addEventListener(KeyboardEvent.KEY_DOWN, key_pressed); 
      function key_pressed(event:KeyboardEvent):void 
      { 
       switch (event.keyCode) 
       { 
        case Keyboard.UP : 
         { 
          player.y += -5; 
          if ((wall1.hitTestPoint(player.x - player.width/2, player.y - player.height/2,true)) || (wall2.hitTestPoint(player.x - player.width/2, player.y - player.height/2,true))) 
          { 
           player.y += 5; 
           nextFrame(); 
           playagain_btn.addEventListener(MouseEvent.CLICK, goback); 
           function goback(event:MouseEvent):void 
           { 
            playagain_btn.removeEventListener(MouseEvent.CLICK, goback); 
            prevFrame(); 
           } 


          } 
          else if ((wall1.hitTestPoint(player.x + player.width/2, player.y - player.height/2,true)) || (wall2.hitTestPoint(player.x + player.width/2, player.y - player.height/2,true))) 
          { 
           player.y += 5; 
           nextFrame(); 
           playagain_btn.addEventListener(MouseEvent.CLICK, goback1); 
           function goback1(event:MouseEvent):void 
           { 
            playagain_btn.removeEventListener(MouseEvent.CLICK, goback1); 
            prevFrame(); 
           } 
          } 
          else if (player.hitTestObject(finish)) 
          { 
           gotoAndStop(4); 
          } 
          break; 





         }; 
        case Keyboard.DOWN : 
         { 
          player.y += 5; 
          if ((wall1.hitTestPoint(player.x - player.width/2, player.y + player.height/2,true)) || (wall2.hitTestPoint(player.x - player.width/2, player.y + player.height/2,true))) 
          { 
           player.y += -5; 
           nextFrame(); 
           playagain_btn.addEventListener(MouseEvent.CLICK, goback2); 
           function goback2(event:MouseEvent):void 
           { 
            playagain_btn.removeEventListener(MouseEvent.CLICK, goback2); 
            prevFrame(); 
           } 
          } 
          else if ((wall1.hitTestPoint(player.x + player.width/2, player.y + player.height/2,true)) || (wall2.hitTestPoint(player.x + player.width/2, player.y + player.height/2,true))) 
          { 
           player.y += -5; 
           nextFrame(); 
           playagain_btn.addEventListener(MouseEvent.CLICK, goback3); 
           function goback3(event:MouseEvent):void 
           { 
            playagain_btn.removeEventListener(MouseEvent.CLICK, goback3); 
            prevFrame(); 
           } 
          } 
          else if (player.hitTestObject(finish)) 
          { 
           gotoAndStop(4); 
          } 
          break; 





         }; 
        case Keyboard.LEFT : 
         { 
          player.x += -5; 
          if ((wall1.hitTestPoint(player.x - player.width/2, player.y - player.height/2,true)) || (wall2.hitTestPoint(player.x - player.width/2, player.y - player.height/2,true))) 
          { 
           player.x += 5; 
           nextFrame(); 
           playagain_btn.addEventListener(MouseEvent.CLICK, goback4); 
           function goback4(event:MouseEvent):void 
           { 
            playagain_btn.removeEventListener(MouseEvent.CLICK, goback4); 
            prevFrame(); 
           } 
          } 
          else if ((wall1.hitTestPoint(player.x - player.width/2, player.y + player.height/2,true)) || (wall2.hitTestPoint(player.x - player.width/2, player.y + player.height/2,true))) 
          { 
           player.x += 5; 
           nextFrame(); 
           playagain_btn.addEventListener(MouseEvent.CLICK, goback5); 
           function goback5(event:MouseEvent):void 
           { 
            playagain_btn.removeEventListener(MouseEvent.CLICK, goback5); 
            prevFrame(); 
           } 
          } 
          else if (player.hitTestObject(finish)) 
          { 
           gotoAndStop(4); 
          } 
          break; 





         }; 
        case Keyboard.RIGHT : 
         { 
          player.x += 5; 
          if ((wall1.hitTestPoint(player.x + player.width/2, player.y - player.height/2,true)) || (wall2.hitTestPoint(player.x + player.width/2, player.y - player.height/2,true))) 
          { 
           player.x += -5; 
           nextFrame(); 
           playagain_btn.addEventListener(MouseEvent.CLICK, goback6); 
           function goback6(event:MouseEvent):void 
           { 
            playagain_btn.removeEventListener(MouseEvent.CLICK, goback6); 
            prevFrame(); 
           } 
          } 
          else if ((wall1.hitTestPoint(player.x + player.width/2, player.y + player.height/2,true)) || (wall2.hitTestPoint(player.x + player.width/2, player.y + player.height/2,true))) 
          { 
           player.x += -5; 
           nextFrame(); 
           playagain_btn.addEventListener(MouseEvent.CLICK, goback7); 
           function goback7(event:MouseEvent):void 
           { 
            playagain_btn.removeEventListener(MouseEvent.CLICK, goback7); 
            prevFrame(); 
           } 
          } 
          else if (player.hitTestObject(finish)) 
          { 
           gotoAndStop(4); 
          } 
          break; 



        } 

       } 


      } 
     } 

    } 
}; 
+0

В коде отсутствует функция MethodInfo-10(). Ошибка означает, что вы пытаетесь получить доступ к полям нулевой (пустой, не инициализированной) ссылки на объект. Файл> Параметры публикации> Разрешить отладку, чтобы узнать точную строку, которая создает ошибку. – Organis

+0

Ошибка # 1009: Не удается получить доступ к свойству или методу ссылки на нулевой объект. \t в функции/Главная/$ construct/key_pressed(). Это ошибка после изменения настроек. – Fahad

+0

Скорее всего, ошибка в брекетинге вложенных функций. Переместите все их на тот же уровень, что и 'Main()', как предлагает @Organis, и сохраните их там в вашем проекте. Это, несомненно, улучшит вашу способность отладки и расширения. – Vesper

ответ

2

Начните с того, что ваш код не так ужасно-лишний вес с дубликатами. Кроме того, функции, определенные внутри функций, определенных внутри функций? Так неправильно на стольких уровнях.

package 
{ 
    import flash.ui.Keyboard; 

    import flash.display.MovieClip; 

    import flash.events.MouseEvent; 
    import flash.events.KeyboardEvent; 

    public class Main extends MovieClip 
    { 
     public function Main() 
     { 
      stop(); 
      start_btn.addEventListener(MouseEvent.CLICK, goThere); 
      stage.addEventListener(KeyboardEvent.KEY_DOWN, onKey); 
     } 

     private function goBack(e:MouseEvent):void 
     { 
      playagain_btn.removeEventListener(MouseEvent.CLICK, goBack); 
      prevFrame(); 
     } 

     private function goThere(clickInfo:MouseEvent):void 
     { 
      start_btn.removeEventListener(MouseEvent.CLICK, gothere); 
      nextFrame(); 

      stage.focus = stage; 
     } 

     private function testPlayer():Boolean 
     { 
      if (wall1.hitTestPoint(player.x - player.width/2, player.y - player.height/2,true) return true; 
      if (wall2.hitTestPoint(player.x - player.width/2, player.y - player.height/2,true) return true; 
      if (wall1.hitTestPoint(player.x + player.width/2, player.y - player.height/2,true) return true; 
      if (wall2.hitTestPoint(player.x + player.width/2, player.y - player.height/2,true) return true; 

      return false; 
     } 

     private function movePlayer(dx:Number, dy:Number):void 
     { 
      player.x += dx; 
      player.y += dy; 

      if (player.hitTestObject(finish)) 
      { 
       gotoAndStop(4); 
      } 
      else if (testPlayer()) 
      { 
       player.x -= dx; 
       player.y -= dy; 

       nextFrame(); 

       playagain_btn.addEventListener(MouseEvent.CLICK, goBack); 
      } 
     } 

     private function onKey(event:KeyboardEvent):void 
     { 
      switch (event.keyCode) 
      { 
       case Keyboard.UP: 
        movePlayer(0,-5); 
        break; 

       case Keyboard.DOWN: 
        movePlayer(0,5); 
        break; 

       case Keyboard.LEFT: 
        movePlayer(-5,0); 
        break; 

       case Keyboard.RIGHT: 
        movePlayer(5,0); 
        break; 
      } 
     } 
    } 
} 
+0

Я полностью согласен с вами в отношении функций, но если я полагаю, что он показывает мне эту ошибку. Ошибка # 1009: не удается получить доступ к свойству или методу ссылки на нулевой объект. \t at Main/movePlayer() \t at Main/onKey() ArgumentError: Error # 1063: несоответствие счетчика аргументов на Main/goBack(). Ожидаемое 0, получено 1. – Fahad

+0

Да. Я забыл поставить аргумент события. Вы должны были это понять самостоятельно. – Organis

+0

да, это сделал. Спасибо @Organis. У меня есть один вопрос относительно работы. Когда я запускаю игру и нажимаю кнопку «Пуск», все события клавиатуры перестают работать, и когда я нажимаю кнопку мыши на экране, он начинает работать. Есть ли способ, которым я могу это разрешить. – Fahad

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