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 を拡張します。これは、敵が Rectangle だけでなく、いくつかのキネティック エレメントを持つためです。
次に、その「クラス」のインスタンスをいくつか作成し、それらをゲーム レイヤーに追加します。
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);
}
何が欠けているのか、最初の方法で個別のオブジェクトを取得できないのはなぜですか?