【问题标题】:Bullseye scoring game - Wrong to try to use pure JS?Bullseye 得分游戏 - 尝试使用纯 JS 错了吗?
【发布时间】:2021-07-12 21:55:41
【问题描述】:

我正在开发一个逻辑上简单的游戏,其中包含一个靶心和 8 轮记分牌。我在每个区域使用带有 onClick 事件的圆形图像映射来写入适当的得分量。示例:靶心的中间是 6 分,下一个环是 4 分,下一个是 3 分,以此类推。我正在使用会话存储来存储玩家人数、玩家姓名、轮到谁等。

我对第 1 版的了解相当深入,并且大部分都可以正常工作,但由于我构建它的方式,我开始遇到一些问题。我遇到了一个很难使用 HTML 表格的问题,因为表格 HTML 在我的所有 JS 在文档中触发之前呈现。问题示例:我要求将玩家人数作为游戏的第一步。我需要为每个玩家写一个表格行,如果页面已经呈现,我不能这样做。此外,在宣布获胜者时,我没有一个很好的方法来关联玩家姓名和玩家总得分。

所以我的问题是……尝试用纯 HTML 和 JS 来做这件事有错吗? jQuery(或其他语言)会让这更容易吗?我没有大量使用 jQuery 的经验。您会改为使用数据库来临时存储球员人数、姓名、分数等吗?

也许我可以将游戏的提示部分拆分为单独的页面?例如。第 1 页询问有多少玩家,第 2 页询问他们的姓名,第 3 页建立靶心和记分牌?我还得解决球员姓名和总分的关联问题。

我的代码没有足够的形状来展示大众,所以这更像是一篇理论文章。谢谢!

【问题讨论】:

  • Jquery 不是另一种语言。这是一个越来越过时的 javascript 库。
  • @CharlesBamford 我不明白为什么它会被认为是过时的。虽然现在跨浏览器兼容性已经不是什么大问题了,但在许多情况下,它仍然允许人们用更少的代码完成更多工作。
  • 我要补充一点,除了我设计的系统之外,我不需要担心这个工作在任何系统上。我可以锁定浏览器、屏幕大小、视口大小等。

标签: javascript


【解决方案1】:

我需要为每个玩家写一个表格行,如果页面已经呈现,我不能这样做。

为什么不呢?您可以在呈现后轻松修改现有的 html:

const add = document.getElementById("add")
const players = document.getElementById("players").querySelector('tbody');
add.addEventListener("click", () => {
   const newRow = document.createElement('tr');
   const playerName = document.createElement('td');
   const playerScore = document.createElement('td');
   const controls = document.createElement('td');
   controls.innerHTML = `
       <button class="incrementScore">+</button>
       <button class="decrementScore">-</button>
   `;
   playerScore.innerHTML = 0
   newRow.appendChild(playerName);
   newRow.appendChild(playerScore);
   newRow.appendChild(controls);
   controls.querySelector('.incrementScore').addEventListener('click', () => {
       playerScore.innerHTML = parseInt(playerScore.innerHTML) + 1;
   });
   controls.querySelector('.decrementScore').addEventListener('click', () => {
       playerScore.innerHTML = parseInt(playerScore.innerHTML) - 1;
   });
   const name = prompt('name?');
   playerName.innerHTML = name;
   players.appendChild(newRow);
});
<table id="players" border=1>
<thead><tr><th>Player</th><th>Score</th><th></th></tr></thead>
<tbody>
</tbody>
<tfooter>
<tr><td colspan=3><button id="add">+ Add Player</button></td></tr>
</tfooter>
</table>

【讨论】:

  • 有趣!我会试试这个。谢谢!
  • 我的桌子有一个 和 。当我尝试将其调整到我的页面时,新的 和 被放置在 之外。有没有办法确保嵌套被正确写入?我必须稍微调整一下您的示例,因为我使用的是来自 prompt() 的会话存储 numPlayers。我的 for 循环 numPlayers 次以建立适当的表行数,并在执行过程中填写玩家的姓名。
  • 查看编辑 - 您只需确保将元素添加到正确的父级,如果更容易,您可以使用 innerHTML 一次编写整个块,就像我用控制按钮演示的那样
  • 太棒了!我能够毫不费力地让它工作。感谢您的提示!
【解决方案2】:

Canvas API 可能比使用纯 HTML 元素更适合您的任务。 Canvas API 为您提供更精细的图形显示控制,因此更适合游戏。

您还可以查看WebGl API,它允许进行 3D 和 2D 图形渲染。例如,Unity 3D 使用 WebGl API。

【讨论】:

    【解决方案3】:

    你可以在那里做任何你想做的事——我们的团队只是想要一个请求去我们的后端服务器记录履行或错误,你可以see。 (我们用环境唯一值替换#loginUrl#。我不能为此使用我的环境记录,因此通过我们的管道执行)

    【讨论】:

      猜你喜欢
      相关资源
      最近更新 更多
      热门标签