0

我正在做一个平台游戏。我试图让玩家在舞台上四处走动,并能够跳跃,并添加某种类型的重力。但是,当我运行它时,我收到此错误:错误 #1009:无法访问空对象引用的属性或方法。

package {

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

public class Code1 extends MovieClip {

    var charSpeed:int = 0;
    var velocity:int = 0;
    var gravity:Number = 1;
    var Jump:Boolean = false;
    var leftKey:Boolean;
    var rightKey:Boolean;
    var upKey:Boolean;

    private var platform:Platform;

    public function startGame(){
         stage.addEventListener(KeyboardEvent.KEY_DOWN, checkKeyDown);
         stage.addEventListener(KeyboardEvent.KEY_UP, checkKeyUp);
         stage.addEventListener(Event.ENTER_FRAME, loop);
         stage.addEventListener(Event.ENTER_FRAME, update);
    }

    public function Code() {
    }

    public function update(evt:Event){
        moveChar();
    }

    public function moveChar(){
        if (leftKey == true){
            charSpeed -= 10;
        }
        if (rightKey == true){
            charSpeed += 10;
        }
        if (upKey == true){
            if(!Jump){
                velocity -= 14;
                Jump = true;
            }
        }
    }


    function checkKeyDown(evt:KeyboardEvent){
        if (evt.keyCode == Keyboard.UP){
            upKey = true;
        }
        else if (evt.keyCode == Keyboard.RIGHT){
            rightKey = true;
        }
        else if (evt.keyCode == Keyboard.LEFT){
            leftKey = true;
        }
    }

    function checkKeyUp(evt:KeyboardEvent){
        if (evt.keyCode == Keyboard.UP){
            upKey = false;
        }
        else if (evt.keyCode == Keyboard.RIGHT){
            rightKey = false;
        }
        else if (evt.keyCode == Keyboard.LEFT){
            leftKey = false;
        }
    }

    function loop(evt:Event){
        player.x = charSpeed;
        if (player.x < 0){
             player.x = 0;
        }
        if (player.x > 550){
             player.x = 550;
        }

        velocity += gravity;

        if (!platform.hitTestPoint(player.x, player.y, true)){
            player.y += velocity;
        }

        for (var i = 0; i < 10; i++){
            if (platform.hitTestPoint(player.x, player.y, true)){
                player.y--;
                velocity = 0;
                Jump = false;
            }
        }
    }
}

}

我的平台链接是“平台”,但我为它设置了一个变量(或尝试)。我调试了代码,它想出了这一行: player.x = charSpeed; 我不知道该怎么做,如果有人可以提供帮助,那就太好了。

4

2 回答 2

0

您永远不会声明或实例化(即 player = new Player())您的播放器。
或者,如果您的播放器在 .fla 时间线的舞台上,则它需要实例名称“player”。这可以在对象属性中设置。

于 2013-10-24T10:16:59.700 回答
0

您的播放器对象为空。

我不认为istantiation线:

var player:Player = new Player();

在使用播放器的属性之前添加它

于 2013-10-24T10:19:43.207 回答