最近在开发一款类似消消乐的三消游戏,在碰到实现斜方向下落的时候卡住了很长时间。好几天没有思路,原本的思路是一次性预判多个宝石的一连串运动路径,运用缓动运动队列来实现宝石运动路径,例如 下落->滑落->下落。用这种方式虽然会提高性能,但发现总是无法预判所有宝石运动路径,可能性太多了,比如某一个宝石的下落原本只会朝下,但加入了斜下落后会有三种可能,左下,下,右下,20个宝石的下落就会有3的20次方种可能,其产生的可能性会呈指数级别增加,是不可能预测的,也就是用动画队列来实现完全不可能。于是放弃这种思路,改用每个宝石的每次运动都进行一次判断下次运动方式的方法,每次运动以一个方格为单元,运动方式可以是下落,左下落或右下落。原本判断滑落的条件改为填充空白,每次消除和每次运动都会产生新的空白,用上方、左上方或右上方的宝石来填充这些空白,由于选择哪个方向的宝石来填充的判断条件和判断下落的方式是一样的。所以我们可以分别判断上方、左上方和右上方的运动方式。而匹配消除宝石的时机发生在宝石停止运动或者是玩家交换宝石的时候。由此可见玩家交换宝石是整个运动过程的触发扳机,其整个逻辑过程如下图所示:
时间: 2024-10-13 12:05:27