我已经为正在开发的游戏的Player类创建了Javascript对象,使用以下代码从Collidable类“继承”了该游戏:

Player.prototype = new Collidable(50, 50, 70);


这个Collidable类具有Vector类的实例,该实例在我的代码中实例化为:

this.pos = new Vector(x, y) || new Vector(50, 50);


我的问题是,我可以很好地创建一个新的Collidable对象,并且其中的向量将具有new Collidable(x, y, diameter)部分的前两个参数中给出的x和y值。但是,创建新播放器(current = new Player();)时,x和y的向量值将变为NaN。

下面,我包含了Collidable构造函数和Player构造函数的代码。

可碰撞:

Collidable = function Collidable(x, y, d){
    this.pos = new Vector(x, y) || new Vector(50, 50); // Position of centre
    this.diam = d || 50; // Diameter
    this.col = new Color().randomRGB(); // For debug
}
// More functions below


玩家:

Player = function Player(){
    this.health = 100;
    this.facing = 0;
    this.sprites = new Image();
    this.sprites.src = "./npc-oldman1.png";
    this.spriteNo = 0;
    this.moveSpeed = 2;
}

Player.prototype = new Collidable(50, 50, 70);
// More functions below


我怀疑这与this问题有关,但尚未能够找出问题所在。

我的完整代码为here。它应该做的是显示一个老人的图像,该图像会移动到鼠标单击的位置(在开始时或您手动更改pos值时,它会在(50,50)(创建播放器的位置)闪烁) 。在添加Collisions类之前,我已经使用了代码。

提前致谢。

最佳答案

您的vector.js代码会执行以下检查:

if (typeof x === 'NaN' || typeof y === 'NaN')


但是,typeof NaN == 'number'。您需要isNaN(x),或更确切地说是x != x



解决此问题后,很明显您的问题出在其他地方。这行:

var diff = new Vector(this.getCentre.x - x, this.getCentre.y - y);


应该是以下之一:

var diff = new Vector(this.getCentre().x - x, this.getCentre().y - y);
var diff = this.getCentre().diff(new Vector(x, y))


有很多缺少的括号。

09-06 12:09