求教大家三消游戏的掉落算法

看有些人分为提前计算和实时计算,本人使用的是提前计算好每一个棋子的掉落路径,然后最后进行执行动画。但是有个问题,有些格子掉落是左右依次交替执行的,如果提前计算好最后执行掉落动画,就会造成某个格子上可能会同时经过两个棋子。不知道有经验的大家都是怎么做的?想要实现的要过类似于Candy Crush或者Royal Match的那种,看起来很自然的掉落。

1赞

每掉落一格格子计算一次?

那样下落的时候动画就会显的很不连贯吧

不会,每次都获取一下初速度,根据初速度和加速度再移动

没实际做过三消类的。不过思路倒是有一个:
一般会区分数据和 UI。
1、玩家交换操作作为输入;
2、数据层做消除判定;有消除,那么该次消除封装成数据 A1,然后掉落棋子(封装成 A2),掉落后继续做判定,直到没有消除行为。这个过程形成数据串[A1, A2,…] 返回给客户端进行 UI 表现;
3、UI 表现完毕后,允许玩家进行输入;

我可以尝试看看

如果想实现Royal Match那种实时操作的玩法,建议可以使用ECS来做

判断下要降落多少格子,给个初始位置然后一个tween动画

有没有大佬给一些算法思路?

这些都有做,会有同一个格子同时有两个棋子经过的问题

之前做六边形消除的时候 会先判断他落下的方式左右左右这种是用tween 正方形下方障碍物这种的还没有做过

我准备尝试一下实时计算了,这样可能更加解决同一个格子被两个棋子同时经过的问题

还是计算好所有棋子掉落的结果再执行动画,但是每次所有棋子都只计算掉一格的,然后执行动画,动画下落完一格,再递归词方法,直到无棋子可落,此时再计算有无可消棋子,消完再递归落,直到不可消不可落

二维数组,从下往上遍历,记录每一列第一次找到的空格子下标,找到同一列的方块的时候更新二维数组,同时更新该列空格子的下标,直到遍历结束。小一点的方阵这个简陋的方法还是可行的。

提前计算掉落后的位置,播放动画,在消除计算 循环下去直至没有消除

这种方式,如果垂直掉落好多个格子就会显得动画很不连贯。

道理都明白,只是有一些细节问题的处理很麻烦

都是移动一次计算一次的以前做过

我做的是提前计算掉落路径,但是遇到一个问题,就是掉落途中其他棋子是否可以移动。而且很容易产生BUG,我也希望有做过的大佬可以说下思路。

掉落时屏蔽点击触摸事件