未捕获的类型错误:无法设置属性'vX'的未定义

Uncaught TypeError: Cannot set property 'vX' of undefined

本文关键字:属性 未定义 vX 设置 类型 错误      更新时间:2023-09-26

嗨,伙计们,我在学校的游戏代码中又遇到了一个缺陷。。。所以在这里,我试图添加我的"Player Rocket",所以这是书中刚刚让我在所有生成的小行星下添加的代码。

    player.vX = 0;
    player.vY = 0;
    if (player.moveRight) {
        player.vX = 3;
    };
    if (player.moveUp) {
        player.vY = -3;
    };
    if (player.moveDown) {
        player.vY = 3;
    };
    player.x += player.vX;
    player.y += player.vY;
    context.fillStyle = 'rgb(255, 0, 0)';
    context.beginPath();
    context.moveTo(player.x+player.halfWidth, player.y);
    context.lineTo(player.x-player.halfWidth, player.y-player.halfHeight);
    context.lineTo(player.x-player.halfWidth, player.y+player.healfHeight);
    context.closePath();
    context.fill();

现在错误我一直得到它这个。。。

未捕获的类型错误:无法设置未定义的属性"vX"

我翻阅了这本书,想知道我是否必须在哪里定义这一点,但我没有遗漏任何东西。现在我还是个新手,但我看到我使用player.vX的唯一地方是这里。

var player;
var Player = function(x, y){
    this.x = x;
    this.y = y;
    this.width = 24;
    this.height = 24;
    this.halfWidth = this.width/2;
    this.halfHeight = this.height/2;
    this.moveRight = false;
    this.moveUp = false;
    this.moveDown = false;
    this.vX = 0;
    this.vY = 0;
};

如果有人能帮助我,更好地理解这一点,那就太好了!非常感谢。

当您说var player;时,您将player设置为未定义。您需要创建一个Player()的新实例。你可以通过做到这一点

var player=new Player(xCoord,yCoord);

如果这本书认为启动与构造函数名称相似的东西会实例化一个新的Player,那么它就大错特错了。

要了解更多关于对象的信息,您应该查看MDN的教程