2012-12-13 2 views
1

Я как-то вроде noob для flash, но сейчас я программирую игру, и я пытаюсь переместить моего персонажа, но я получаю ошибку # 1009 Вот мой код в моей «GameState». В основном это ошибка на любом Keypress, у меня есть мой персонаж с именем player (Player в библиотеке), и у него есть еще один клип в нем с именем WalkDown (я дал ему имя экземпляра walkDown на временной шкале) Я не совсем уверен, что продолжается. В частности, это ошибка в строке, где он вызывает имя фрейма. Любая помощь будет оценена! пакет {Ошибка: # 1009: Ошибка типа (строка # 114)

import flash.display.Stage; 
import flash.display.MovieClip; 
import flash.events.Event; 
import flash.events.MouseEvent; 
import flash.events.KeyboardEvent; 
import flash.ui.Keyboard; 
import flash.geom.Point; 

public class GameState extends MovieClip { 

    private var player:MovieClip; 
    private var walking:Boolean = false; 


     // is the character shooting 
     //private var shooting:Boolean = false; 

     // wlaking speed 
     private var walkingSpeed:Number = 5; 
     private var xVal:Number = 0; 
     private var yVal:Number = 0; 




    public function GameState() { 

     // constructor code 
     player = new Player(); 
     addChild(player); 
     player.x = 300; 
     player.y = 300; 
     player.gotoAndStop("stance"); 



    this.addEventListener(Event.ADDED_TO_STAGE, initialise); 


    } 
    private function initialise(e:Event){ 
     // add a mouse down listener to the stage 
     //addEventListener(MouseEvent.MOUSE_DOWN, startFire); 

     // add a mouse up listener to the stage 
     //addEventListener(MouseEvent.MOUSE_UP, stopFire); 
     player.addEventListener(Event.ENTER_FRAME,motion); 
     stage.addEventListener(KeyboardEvent.KEY_UP,onKey); 
     // add a keyboard down listener 
     stage.addEventListener(KeyboardEvent.KEY_DOWN, offKey); 
     stage.focus = stage; 

     // Add keyboard events 


    } 
    private function motion(e:Event):void{ 
     // if we are currently holding the mouse down 
     //if (shooting){ 
      //FIRE 
      //fire(); 

     //} 
     player.x += xVal; 
     player.y += yVal; 

     } 



    //private function startFire(m:MouseEvent){ 
     //shooting = true; 
    //} 
    //private function stopFire(m:MouseEvent){ 
     //shooting = false; 
    //} 
    private function onKey(evt:KeyboardEvent):void 
    { 
     trace("key code: "+evt.keyCode); 
     switch (evt.keyCode) 
     { 
      case Keyboard.W : 
       yVal = walkingSpeed; 

       if (! walking) 
       { 
        trace("walking up"); 
        player.walkDown.gotoAndPlay("walking"); 
        walking = true; 
       } 
       break; 
      case Keyboard.S : 
       yVal = - walkingSpeed; 
       if (! walking) 
       { 
        player.walkDown.gotoAndPlay("walking"); 
        walking = true; 
       } 
       break; 
      case Keyboard.A : 
      xVal = walkingSpeed; 
       if (! walking) 
       { 
        player.walkDown.gotoAndPlay("walking"); 
        walking = true; 
       } 
       break; 
      case Keyboard.D : 
       xVal = walkingSpeed; 
       if (! walking) 
       { 
        player.walkDown.gotoAndPlay("walking"); 
        walking = true; 
       } 
      break; 
     } 
    } 
    private function offKey(evt:KeyboardEvent):void 
    { 
     switch (evt.keyCode) 
     { 
      case Keyboard.W : 
       //for now just reset velocity to zero 
       yVal = 0; 
      //also stop walk cycle etc. 
       player.gotoAndStop("stance"); 
       //don't forget to update your Boolean 
       walking = false; 
       break; 
       case Keyboard.S : 
       //for now just reset velocity to zero 
       yVal = 0; 
      //also stop walk cycle etc. 
       player.gotoAndStop("stance"); 
       //don't forget to update your Boolean 
       walking = false; 
       break; 
       case Keyboard.A : 
       //for now just reset velocity to zero 
       xVal = 0; 
      //also stop walk cycle etc. 
       player.gotoAndStop("stance"); 
       //don't forget to update your Boolean 
       walking = false; 
       break; 
        case Keyboard.D : 
       //for now just reset velocity to zero 
       xVal = 0; 
       //also stop walk cycle etc. 
       player.gotoAndStop("stance"); 
       //don't forget to update your Boolean 
       walking = false; 
       break; 
     } 
    } 
    // Players Motion 




    private function fire():void{ 
     var b= new Bullet(); 
     // set the position and rotation of the bullet 
     b.rotation = rotation; 
     b.x = x; 
     b.y = y; 
     // add bullets to list of bullets 
     MovieClip(player).bullets.push(b); 

     // add bullet to parent object 
     player.addChild(b); 
     // play firing animation   
     player.shooting.gotoAndPlay("fire"); 
    } 


} 


} 
+0

В частности, ошибка на линиях, где я призывая к воспроизведению ходячей анимации. –

+1

Было бы полезно опубликовать полное сообщение об ошибке, а не только код. –

ответ

0

Вы говорили, Ошибка # 1009 (не удается получить доступ к свойству или метод нулевая ссылка на объект) возникает, когда вы делаете

player.walkDown.gotoAndPlay("walking"); 

Если да, то это потому, что вы должны сначала перейдите к кадру, где находится WalkDown MovieClip, прежде чем вы сможете получить к нему доступ.

Если говорить ваша «позиция» кадр в кадре 1 и ваш WalkDown MovieClip в рамке 2. Ваш код в функции OnKey должен выглядеть следующим образом:

case Keyboard.W : 
    yVal = walkingSpeed; 

    if (! walking) 
    { 
     trace("walking up"); 
     player.gotoAndStop(2); // player.walkDown is now accessible // 
     player.walkDown.gotoAndPlay("walking"); 
     walking = true; 
    } 
    break; 
Смежные вопросы