原工程链接:
https://github.com/sschmid/Match-One
我关于“MatchOne”工程的简单拆解:
“MatchOne”拆解
我记得老版的示例工程,好像可以修改配置,将其变成多消游戏(也可能是记错了)。最新的工程不支持。我们只好自己动手“改造”了。
Step1
首先我们修复个问题,每当游戏开始时,最上层的棋子会播放一个从棋盘外下落的动画,很明显,这不是我们希望看到的。我们只希望在游戏过程中,新生成的棋子有这样的动画效果。
每当游戏开始时,会出现这种情况
解决方案:
我们希望FillSystem添加的棋子才有这种动画,所以我们添加一个SpawnedComponent用以标记棋子是由FillSystem生成的,并且只有一帧的生命周期:
接着GameEventSystem会调用PieceView类中的OnPosition方法,在这里我们修改:
最后我们在帧尾执行GameCleanupSystems移除SpawnedComponent,因为我用的是免费版Entitas,所以Cleanup System需要自己写:
Step2
实现交换两个棋子位置的功能。
首先,我们修改ProcessInputSystem,使得我们点击棋子时,改为选中而不是销毁。
ProcessInputSystem.cs
我们可以加一些表现,当选中时,棋子变大一些(这里省略了注册SelectComponent事件的代码):
PieceView.cs
接着新建ExchangePositionSystem,当被选中的棋子等于2个时,判断他们是否相邻,并交换。
ExchangePositionSystem.cs
是否会出现被选中的棋子大于2的情况呢?玩家在一帧内点两个棋子?
Step3
判断棋子是否匹配。
新建一个空的component:MatchedComponent。
新建CheckMatchSystem,简单遍历所有棋子,看是否匹配:
CheckMatchSystem.cs
Step4
处理标记为Matched的棋子。
新建MatchSystem,将棋子标记为Destroyed。
MatchSystem.cs
Step5
把GameConfig中的Block Probability改为0。Play !!!











网友评论