我在 JavaScript 中得到了以下“敌人”类:
function Enemy(position, rotation) {
this.name = null;
this.enemyForm = new Kinetic.Rect({
x: 0,
y: 0,
width: 20,
height: 20,
fill: 'red',
stroke: 'black',
strokeWidth: 1
});
this.setX(position.posX);
this.setY(position.posY);
this.setRotation(rotation);
this.setOffset(10, 10);
this.add(this.enemyForm);
}
Enemy.prototype = new Kinetic.Group();
如您所见,我为此扩展了 Kinetic.Group,因为敌人将拥有更多的动力学元素,而不仅仅是一个矩形。
现在我创建该“类”的一些实例并将它们添加到游戏层:
var enemy1 = new Enemy({posX: 50, posY: 50}, 0);
this.layer.add(enemy1);
var enemy2 = new Enemy({posX: 100, posY: 100}, 0);
this.layer.add(enemy2);
var enemy3 = new Enemy({posX: 200, posY: 200}, 0);
this.layer.add(enemy3);
问题:每个敌人都获得了“enemy3”的位置,而不是他们自己的位置。因此,每个敌人都将被绘制在位置“200, 200”。 现在,如果我在没有继承的情况下尝试这个,它可以正常工作:
function Enemy(position, rotation) {
this.name = null;
this.enemyForm = new Kinetic.Group();
var rect = new Kinetic.Rect({
x: 0,
y: 0,
width: 20,
height: 20,
fill: 'red',
stroke: 'black',
strokeWidth: 1
});
this.enemyForm.setX(position.posX);
this.enemyForm.setY(position.posY);
this.enemyForm.setRotation(rotation);
this.enemyForm.setOffset(10, 10);
this.enemyForm.add(rect);
}
谁能告诉我我错过了什么,为什么我没有用第一种方法得到单独的对象?