问题描述
我对JavaScript类的了解有限,并且发现很难找到有关它们的优质资源来帮助我完成项目。
我为回合制游戏创建了以下类别;
class Player {
constructor(name,image,location,isTurn) {
this.name = name;
this.image = image;
this.location = location;
this.isTurn = isTurn;
this.cssClass = "player";
this.weapon = "unarmed";
this.health = 100;
//deal with default weapon here
}
// get css class
getCSSClass() {
return this.cssClass;
}
getPosition() {
return this.location;
}
// set position
setPosition(identifier) {
this.location = identifier;
return this.location.toString();
}
}
let player1 = new Player("player2","css/player1.png","",true);
let player2 = new Player("player2","css/player2.png",false);
我还创建了一个功能,可以在棋盘上的随机位置生成玩家。每个图块都有一个唯一的编号ID(介于1到150之间)。随机数功能可以正常工作。
下面是我遇到的我的派生函数;
function spawnPlayer(n,identifier) {
let playerSpawn = document.getElementById(identifier);
playerSpawn = playerSpawn.id;
console.log(playerSpawn)
if (occupied.includes(playerSpawn) == true) {
spawnPlayer(n,identifier);
} else {
`player${n}`.setPosition(playerSpawn);
console.log(("player" + `${n}`).getPosition());
playerArray.shift();
playerArray.unshift(playerSpawn.id);
playerSpawn.classList.add("player");
playerSpawn.classList.add("player" + n.toString());
//console.log("player" + n);
//console.log(player2.image);
playerSpawn.style.setProperty(
"background-image","url(css/player" + n + ".png)"
);
playerSpawn.style.setProperty("background-size","cover");
}
}
spawnPlayer(1,randomise());
我在理解如何使用模板字面量方面遇到麻烦,因为我可以将播放器1和2重复使用此功能作为参数。
`player${n}`.setPosition(playerSpawn);
这是导致我出现问题的地方。我当前的错误是
未捕获的TypeError:n.setPosition不是函数 在spawnPlayer
任何人的帮助都将不胜感激,如果有人可以推荐一些探索JavaScript类实现的材料也将非常有帮助
谢谢
解决方法
将player1
和player2
设置为某些对象的属性。然后,您可以动态访问它们:
const obj = {
player1: new Player(...),player2: new Player(...),}
// ...
obj[`player${n}`].setPosition(playerSpawn)