今天来处理一下游戏流程相关的内容。
因为我这边打算是按照时间递进而加载道具以及病毒的。所以我这边就用了一个状态来判断到了哪种状态。
先定义4中状态:
public enum GameProcessStatus
{
Status1 = 1,
Status2 = 2,
Status3 = 4,
Status4 = 8,
}
首先先说明一下,为什么采用1,2,4,8,16这样的数字,本来是想用1234,然后保存到dictionary里面,但我们判断游戏进程的时候肯定是要在update里面循环调用的,如果采用枚举做为key,就会有一些列的装箱操作(可以自行百度为什么会引起装箱)。为了性能,我这边就采用位运算了。
public override void DoUpdate(float deltaTime)
{
base.DoUpdate(deltaTime);
if (_gameMode == GameDefine.GameMode.Easy)
{
if (_gameTime > 8 && !IsHasStatus(GameProcessStatus.Status2))
{
ChangeGameStatus(GameProcessStatus.Status2);
}
else if (_gameTime > 15 && !IsHasStatus(GameProcessStatus.Status3))
{
ChangeGameStatus(GameProcessStatus.Status3);
}
else if (_gameTime > 25 )
{
if (!IsHasStatus(GameProcessStatus.Status4))
{
ChangeGameStatus(GameProcessStatus.Status4);
}
_repeatingTime += deltaTime;
if (_repeatingTime >= 6)
{
RepeatingCreateVirus();
_repeatingTime = 0;
}
}
}
_gameTime += deltaTime;
}
_gameTime为全局的游戏时间,每个状态对应的时间后面可配置;当到达某个时间同时没到一定状态的时候,我们可以切换相应的游戏状态。在每个状态里做对应的事情。当处于最后一个状态时,我们就可以循环生成物件 了,不用人为干扰了。
我这边测试了一下整个流程,为了方便查看创建流程,我把scence场景也开放了。
可以看到整个游戏的一个整体效果。
上面也可以看到,我们游戏的总体流程已经做完了,数值的调整需要慢慢打磨,接下来需要接入UI框架(其实就开始、结算界面)。UI接入后,就可以接入事件,从而消灭每个病毒都有直观的分数,更有成就感。。。
传送门:独立游戏开发–索引