杀手揭晓/被击败后游戏循环无法重置的技术问题排查
问题与修复
问题概述
正在开发一款幸存者对抗杀手的游戏,规则是剩余角色不足4人时,在游戏结束阶段揭晓杀手身份。目前遇到两个问题:
endGame()函数中,判断「杀手名称已揭晓且新章节按钮被点击则重载游戏」的逻辑未生效- 出现语法错误:
Uncaught SyntaxError: Invalid left-hand side in assignment (at game.js:236:7)
错误原因
1. 语法错误直接原因
在endGame()的if判断里犯了两个低级错误:
- 使用
=赋值运算符替代了===比较运算符:document.getElementById("objecttext").innerHTML = killer是把killer赋值给元素内容,不是判断是否相等,这就是报错的根源 - 使用
&位运算符替代了&&逻辑与运算符:&是二进制位运算,逻辑判断应该用&&
2. 按钮点击判断错误
DOM元素没有.clicked属性,无法通过document.getElementById("buttonp").clicked === true来判断按钮是否被点击,必须通过事件监听追踪点击状态
3. 其他潜在逻辑错误
playEpisode()中判断剩余角色的条件错误:castMembers < 4,数组不能直接和数字比较,应该用castMembers.length < 4openingScene()和playEpisode()的for循环错误:for (let i = 0; i < castMembers; i++),应该用castMembers.length作为循环上限openingScene()中if (lowestPlayer.totalStats=0)是赋值操作,不是比较
修复代码
全局变量新增点击状态标记
let buttonClicked = false; // 新增:标记按钮是否被点击
修正按钮点击事件
playAs1996Cast.addEventListener('click', () => { document.getElementById("buttonp").innerHTML = "Continue"; console.log("The 'Play As 1996 Cast' button has been clicked."); buttonClicked = true; // 标记按钮已点击 detectGamePlay(); });
修正endGame()函数
function endGame() { gameStarted = false; episodecount = 0; document.getElementById("objecttext").innerHTML = killer; killerRevealed = true; // 标记杀手已揭晓 console.log("End Game:" + killer); // 满足条件则重载游戏 if (killerRevealed && buttonClicked) { location.reload(); } }
修正其他逻辑错误
playEpisode()中的角色数量判断:
// 错误写法 if (castMembers < 4) { endGame(); } // 正确写法 if (castMembers.length < 4) { endGame(); }
openingScene()和playEpisode()的for循环:
// 错误写法 for (let i = 0; i < castMembers; i++) // 正确写法 for (let i = 0; i < castMembers.length; i++)
openingScene()中的条件判断:
// 错误写法 if (lowestPlayer.totalStats=0){ playEpisode() } // 正确写法(根据逻辑调整,示例为判断最低分是否为0) if (lowestPlayer === 0){ playEpisode() }
内容的提问来源于stack exchange,提问作者Yosuf
相关产品推荐
相关产品推荐

