我已经为正在开发的游戏的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))
有很多缺少的括号。