Entitas —— 将“MatchOne”升级成“MatchT

2019-06-04  本文已影响0人  珏_Gray

原工程链接:
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 !!!

上一篇 下一篇

猜你喜欢

热点阅读