Я пишу карточную игру, используя javascript / html5
Я получаю состояние игры как запрос ajax.это данные JSON, в которых перечислены игроки и какие карты у них в руке
Я пытаюсь перебрать каждого игрока и установить данные руки следующим образом
gameState.Players.forEach(function (player, i) {
var inx = i + 1;
var canvas = document.getElementById("player" + inx);
var ctx = canvas.getContext("2d");
var hand = Object.create(Hand);
hand.initialiseHand(player.Hand);
hand.setPosition(10, 10);
hand.draw(ctx);
});
Существует шесть полотенна странице.Один на каждого игрока
Я использую Object.create для создания нового «экземпляра» руки.И затем вызывая метод draw, который выкладывает изображения на холст
Однако на самом деле происходит то, что данные каждого игрока просто добавляются в один и тот же экземпляр
, т.е. каждый раз, когда я обхожув цикле forEach объекту hand назначается все больше и больше карт
Я хотел бы иметь отдельный экземпляр для каждого игрока
Так как мне этого добиться?
Я хочу зациклить данные и создать новую руку для каждой итерации цикла
Я предполагаю, что переменная руки была выведена из цикла, и поэтому я получаю одну и ту же единицу каждый раз?
и вот как выглядит Рука
var Hand = {
faceDownCards: [],
faceUpCards: [],
inHandCards: [],
initialiseHand: function (handData) {
handData.FaceDownCards.forEach(function (c, i) {
this.faceDownCards.push(Object.create(Card, pd({ rank: c.Rank, suit: c.Suit })));
}, this);
handData.FaceUpCards.forEach(function (c, i) {
this.faceUpCards.push(Object.create(Card, pd({ rank: c.Rank, suit: c.Suit })));
}, this);
handData.InHandCards.forEach(function (c, i) {
this.inHandCards.push(Object.create(Card, pd({ rank: c.Rank, suit: c.Suit })));
}, this);
},
draw: function (context) {
this.faceDownCards.forEach(function (c, i) {
c.draw(context);
});
this.faceUpCards.forEach(function (c, i) {
c.draw(context);
});
this.inHandCards.forEach(function (c, i) {
c.draw(context);
});
},
setPosition: function (x, y) {
this.x = x;
this.y = y;
this.faceDownCards.forEach(function (c, i) {
c.setPosition(x + i * 70, y);
});
this.faceUpCards.forEach(function (c, i) {
c.setPosition(x + i * 70, y + 60);
});
this.inHandCards.forEach(function (c, i) {
c.setPosition(x + i * 20, y + 80);
//c.rotation = 3;
});
}
};