我有一个player
对象,其中还有一个充满其他对象玩家的数组,如下所示:
//player.characters is a list of characters available to select.
//player.CC is registered as the games 'current character' being played.
player.characters = [nullman, dwarf, human, elf, cloud, eren, erentitan, levi, mikasa];
player.cc = player.characters[0];
这些是我可以在选择屏幕中切换游戏角色时访问的其他对象。我写了一个函数来创建一个玩家选择按钮。我想设计此按钮以具有一些内置功能,因此我不必在start.init
功能上重复代码。 (在拥有10行相同代码后,我意识到我需要编写一个函数来支持所有字符而不是每个字符)。
这是我提出的代码,它将为每个可选择的角色提供服务。
function createPlayerButton(name, classID = "selection", delay, duration) {
var button = document.createElement("button");
button.textContent = name;
button.setAttribute("id", name);
button.setAttribute("class", classID);
chatbox.appendChild(button);
button.style.animationDelay = delay + "s";
button.style.animationDuration = duration + "s";
$("#"+name+"").hover(function(){
postPlayerImage("images/players/"+name+".jpg", "animated fadeIn avatar", "0", "1");
console.log(name);
console.log(player.characters.indexOf(cloud));
});
dom.el(""+name+"").onclick = function(){
player.cc = player.characters[1];
listPlayerStats(dwarf);
postPlayerImage("images/dwarf2.jpg", "animated fadeIn avatar", "1", "2");
playerSelect();
}
所以我在这里发生了一些事情。第一块代码几乎在屏幕上创建了按钮。第二个块是悬停动画,它将在屏幕上弹出角色的头像。第三个块是加载统计数据和必要图像的代码。
我遇到的问题是第3行:第2行。 Player.CC是我用来定义当前正在播放的角色。我使用player.characters索引在每个播放器之间切换,但这些数据是硬编码的。我需要一个更强大的系统,它可以根据名称找到我已经拥有的对象,如CreatePlayerbutton( name )参数中所示。
如果你看看block-2:line-4,我可以手动输入一个对象的名字并找到合适的索引,但同样,这是硬编码的。我尝试使用" name",但它的字符串化并且没有注册,因此我在索引上得到-1。
我如何使用"名称"我的函数中的参数,用于在我的player.characters数组中查找对象?
注意:据我所知,在第3行:第3行以后,我有硬编码的矮人数据。在弄清楚如何在第2行设置对象之后,我可以并且将会解决这个问题。
答案 0 :(得分:0)
您可以创建只搜索字符数组以获取特定名称。
使用.find():
let character = player.characters.find(c => c.name == name);
或没有:
let character;
for(c of player.character){
if(c.name == name){
character = c;
break;
}
}
如果您根本不想搜索,只需将字符存储在对象中即可:
player.characters = {nullman: nullman, dwarf: dwarf, human: human, elf: elf, cloud: cloud, eren: eren, erentitan: erentitan, levi: levi, mikasa: mikasa};
并使用
选择它们let character = player.characters[name];