2012-12-13 66 views
1

我很喜欢flash,但我现在正在编写一个游戏,并且我试图让我的角色移动,但是我得到错误#1009这是我在我的“GameState”中的代码。 基本上,任何按键错误,我有我的角色命名球员(球员在图书馆),它有另一个影片剪辑名为WalkDown(我给它在时间轴上walkDown的实例名称)我不知道什么是什么继续。具体来说,它在调用帧名称的行上出错。任何帮助,将不胜感激!当你做错误:#1009:类型错误(行#114)

player.walkDown.gotoAndPlay("walking"); 

包{

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(不能访问空对象引用的属性或方法)出现。如果是这样,那是因为你必须首先转到WalkDown MovieClip所在的帧,然后才能访问它。

如果说你的“立场”框架是在第1帧和您的WalkDown影片剪辑是在框架2.您在安其功能的代码应该是这样的:

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;