消消乐P2 消除后自动补充
消消乐 第二集
本集我们完成了对开始时自动消除后的物品补充功能。
解决Bug
在上一集中,我们的消除逻辑有一个bug,如果三个相同的卡片不在同一行上,也有可能被消除。所以我们要特别判断一下,对于第七列和第八列的卡片,我们让他不能向右判断。第七列和第八列卡片的共同特征是,对8的余数为0和7。所以我们在消除之前加一个判断让这两列不允许向右消除,可以规避掉这种情况。

自动补充
接下来我们实现自动补充功能。在之前我们消除了的部分,我们把状态更换为了特殊的X。只要把这些变成X号的方块处理掉就可以了。
我们来完成基础的逻辑。我们重复执行直到把所有的X处理完,对每个方块进行遍历,遍历到X时,就把所有这个方块下面的方块向上挪动一次。

接下来我们完善发现X的逻辑。当发现有地方被消除之后,我们就让下面的卡片向上移动替代空位置。首先是在队列里更新编号和类型。重复执行直到消除点<56的用意是遍历到最后一行,消除点会逐渐更换为需要向上移动的卡片。
在这里,原来的物品编号列表改名为位置编号。

那么接下来我们就需要知道新的卡片移动到哪里了。创建两个列表位置x坐标和位置y坐标记录一下卡片的位置,游戏开始的时候初始化为空,在初始化卡片的时候把它们的位置加入队列中,这样我们就能随时调用了。

让卡片重复执行,如果发生了位置更新,就移动到更新后的位置。

最后,我们实现新卡片的生成补充。在每次消除点处理完之后,在最后一行的消除点处生成一个新的卡片。

总结
本次我们完成了基础的自动补充功能。当然这集的代码也存在一些问题,比如补充后的卡片没有自动消除,另外新增加的卡片在生成前替换了位置编号和物品类型里对应的项,但是在生成后又修改,添加了一遍位置编号。
此外,自制积木的表现很奇怪。为了加快动画速度,我在自制积木上设定了运行时不刷新。但是在运行时出现了奇怪的问题,比如消除了不该消除的方块,消除位置却是固定的;消除后本应重复执行到列表里没有X的自动补充却在还有X的情况下结束了。
我刚开始是怀疑自制积木不存在阻断,即没有执行完上一个自制积木中所有积木的指令,就开始下一个积木,导致后面的积木使用的是未更新的列表数据,导致提前结束。
但是在测试中发现,积木是存在阻断的,无论有没有刷新屏幕后面的积木都会在前面的积木完全结束后才执行。
现在我还没有确认问题出现的具体原因,但是在每个积木执行前等待一段时间可以解决问题。所以我还是怀疑阻断没有完全达到效果,可能数据的更新会比执行更慢?也有可能是和卡片中的重复执行数据更新有时间差。尤其需要注意的是检查消除情况到卡片补充两段积木直接,需要等待足足半秒而非正常的零点零几秒。但测试中始终没有出现这种问题。
*我们在第四集中会集中修复消除方面混乱的问题,如果在这集结束后发现消除方面的奇怪操作,请先看完第四集教程再尝试。
改了一下午代码后才知道后面一整集基本都在debug的教训

浙公网安备 33010602011771号