我正在创建一个国际象棋程序来测试我的 javascript 能力。它没有任何人工智能,只是计算在任何给定时间可以执行哪些动作,允许玩家执行动作,并改变回合。
这是当前程序的 JSFiddle:https ://jsfiddle.net/1xe7ca00/
游戏机制如下:
1) firstEventListener在所有可以移动的棋子上放置一个事件侦听器:
divChessboardContainer.addEventListener("click", firstEventListener, true);
2) 用户点击符合条件的作品。如果他们愿意,他们可以点击多个部分。
3) 程序从 event.target ( removeAddClassesReturnPieceData )收集数据,检查哪个棋子已被选中并确定该棋子可以执行哪些动作 ( ifWhitePawn、ifBlackKnight等),并以绿色突出显示建议的动作 ( generateObjectForSecondEventListener )。
4) 每个以绿色突出显示的建议移动都放置了一个事件侦听器:
proposedPositionElement.addEventListener("click", movePieces.bind( null, objectForSecondEventListener, proposedPositionElement ), false);
5) 用户单击建议的移动并执行移动 ( movePieces )。目前它只是交换所选作品的 IMG 标签和建议的位置。
6) 我遇到的问题是,我想从之前在每回合结束时以绿色突出显示的所有方块中删除第二个事件侦听器,但我似乎无法将其删除。我研究了removeEventListener()方法,我知道语法必须非常具体才能正常工作,但我无法弄清楚我做错了什么。这是我创建的一个 for 循环,用于尝试删除事件侦听器(不起作用):
for ( let i = 0; i < allListTags.length; i += 1 ) {
let proposedPositionElement = allListTags[i];
console.log(proposedPositionElement);
proposedPositionElement.removeEventListener("click", movePieces, false);
}
谁能帮我吗?
在第 4 步中,您将一个事件绑定到 movePieces.bind(...),而在第 6 步中,您尝试删除 movePieces 侦听器。这些是不同的功能。此外,尝试删除 movePieces.bind(...) 也不起作用,因为这将创建第三个函数。您需要在步骤 4 中的某处存储绑定函数引用,并在步骤 5 中检索它。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句