1

私は一種のフラッシュ初心者ですが、現在ゲームをプログラミングしており、キャラクターを動かそうとしていますが、エラー #1009 が発生しています。これが私の「GameState」のコードです。基本的にどのキープレスでもエラーが発生します。プレイヤーという名前のキャラクター (ライブラリ内のプレイヤー) があり、その中に WalkDown という名前の別のムービー クリップがあります (タイムラインで walkDown のインスタンス名を付けました)。の上。具体的には、フレーム名を呼び出す行でエラーが発生します。どんな助けでも大歓迎です!パッケージ {

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");
    }


}


}
4

1 に答える 1

0

エラー#1009(nullオブジェクト参照のプロパティまたはメソッドにアクセスできません)が発生すると言っていた

player.walkDown.gotoAndPlay("walking");

その場合、WalkDown MovieClip にアクセスする前に、まずそのフレームに移動する必要があるためです。

「スタンス」フレームがフレーム 1 にあり、WalkDown ムービークリップがフレーム 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;
于 2013-02-07T10:16:19.343 に答える