HTML5 Canvas游戏有错误,点击时第一个拼图块会变成不同的块

HTML5 Canvas game has bug where first puzzle piece changes to a different piece when clicked on?

本文关键字:拼图 第一个 有错误 游戏 Canvas HTML5      更新时间:2023-09-26

我想我只需要对我正在开发的这款游戏有一双新的眼光。

这是一个滑动图像拼图

(您将图像分成几块并以随机顺序显示它们,然后我删除拼图的单个部分,用户必须单击每个拼图块以移动它,从而将图像重新组合在一起)

完整代码在这里: https://github.com/Integralist/HTML5-Image-Slider-Game

我遇到的错误是你移动的第一个拼图块,如果你再次点击它 - 当它移回它刚刚来自的位置时 - 拼图块会变成不同的一块(在一个实例中,我注意到它正在更改为删除以启动游戏的拼图, 但这可能只是巧合)。

起初我认为问题出在异步的 setInterval 方法上(我在想,因为我在一个循环中,也许参考循环迭代被搞砸了,但我现在将相关的迭代传递到 setInterval 中,问题仍然发生,所以不可能是那样)。

更新:
我仍然认为问题与设置间隔有关。主要问题是,当我们开始将图像绘制到画布上时,原始的 x/y 坐标显然已经与我们预期的不同。我注意到,当我们单击同一拼图将其移回刚刚的位置时,保存我们要移动的拼图的坐标的对象是不正确的。我注意到 drawnOnCanvasX/Y 属性与它们应该的不同,并且它们现在与empty_space变量的 x/y 坐标匹配?这种情况不会一直发生的事实让我认为 setInterval 没有通过正确的对象从循环传递到在间隔上执行的函数?

任何帮助表示赞赏。

问题是因为我没有从随机数组中删除特定项目。

为了使游戏正常工作,我需要删除 1 个拼图,这允许其他拼图有一个可以移动到的空间。问题是我已经clearRect了我想要的片段,但实际上并没有将其从阵列中删除。因此,当我循环查找数组中具有这些精确 X/Y 坐标的项目时,它正在查找应该删除的拼图块项目(并且因为删除的块是随机选择的,这就是为什么有时会首先通过循环找到该块,而其他时候会找到正确的块)。

基督是痛苦的。