红绿灯功能的实现:
使 用 状 态 机 来 实 现 红 、 黄 、 绿 三 个 灯 的 切 换 。 首 先 创 建 一 个 LightState 类 , 继 承
BaseGameEntity 类。
LightState 状态初始化类:
在 LightState 类 中 定 义 状 态 机 : sm_LightState 设 置 为 一 个 公 共 的 方 法 , 给
LightSwitchover 状态切换类调用。
在 LightState 类中,定义一个 folat 中间公共自动属性(RemainingTime)来获取红、黄、
绿、闲置这四个状态的时限。
初始化 4 个状态的时限,红灯为 33s,绿灯为 30s,黄灯为 0.5s,黄灯的闲置状态时限为 0.5s
定义 3 个 GameObject 类型的公共自动属性,用来获取红绿灯中的红灯、绿灯、黄灯的游戏
对象,分别是:Red、Green、Yellow
定义 StateLights,string 类型的公共的自动属性,用来获取当前红绿灯的状态,给碰撞检
测使用。
定义一个公共的 int 类型的变量 Transitions。用来设置每个红绿灯的初始状态。0 初始状
态设置为“绿灯状态”sm_LightState.SetCurrentState(GreenLight_State.Instance());。大于
0 初始状态设置为“红灯状态” sm_LightState.SetCurrentState(RedLight_State.Instance());
LightSwitchover 状态切换类:
定义红灯状态类,继承 State并实现 State 中的抽象方法,Enter()(进入状态)、
Execute()(执行状态)、Exit()(退出状态)。设置单例模式:RedLight_State。
进入 Enter()
1,调用 LightState 类中的公共自动属性 StateLights,赋一个字符串“StateLight_Red”
|entityType.StateLights = "StateLight_Red";|
2,然后判断红灯对象是否为空,不为空,则将其设置为 ture。
“entityType.Red.light.enabled = true;”打开红灯
3,初始化黄灯闪烁的次数:entityType.next = 3;
4,调用 LightState 类中,folat 类型的中间公共自动属性(RemainingTime)获取红灯状
态的时限: entityType.RemainingTime = entityType.redLightTime;
进入 Execute()
1,设置红灯状态剩余时间,Time .fixedDeltaTime 为固定的增量时间:
StateLight_Red 表示为红灯状态。
entityType.RemainingTime -= Time.fixedDeltaTime;
2,判断当前红灯剩余时间是否小于等于 0,如果条件成立,则切换为绿灯状态:
entityType.GetLight().ChangeState(GreenLight_State.Instance());
进入 Exit()
1,判断红灯对象 Red 是否为 NULL,不为 NULL 时,条件成立,将红灯关闭:
entityType.Red.light.enabled = false;
定义绿灯状态类,继承 State并实现 State 中的抽象方法,Enter()(进入状态)、
Execute()(执行状态)、Exit()(退出状态)。设置单例模式:GreenLight_State。
进入 Enter()
1,调用 LightState 类中的公共自动属性 StateLights,赋一个字符串“StateLight_Green”
|entityType.StateLights = "StateLight_Green";|
StateLight_Green 表示为绿灯状态。
2,判断绿灯对象是否为空,不为空,则将其设置为 ture。
“entityType.Green.light.enabled = true;”打开绿灯
3,调用 LightState 类中,folat 类型的中间公共自动属性(RemainingTime)获取绿灯状
态的时限: entityType.RemainingTime = entityType.GreenLightTime;
进入 Execute()
1,设置绿灯状态剩余时间,Time .fixedDeltaTime 为固定的增量时间:
entityType.RemainingTime -= Time.fixedDeltaTime;
2,判断当前绿灯剩余时间是否小于等于 0,如果条件成立,则切换为黄灯状态:
entityType.GetLight().ChangeState(Yellowight_State.Instance());
进入 Exit()
1,判断绿灯对象 Green 是否为 NULL,不为 NULL 时,条件成立,将绿灯关闭:
entityType.Green.light.enabled = false;
定义黄灯状态类,继承 State并实现 State 中的抽象方法,Enter()(进入状态)、
Execute()(执行状态)、Exit()(退出状态)。设置单例模式:YellowLight_State。
进入 Enter()
1,调用 LightState 类中的公共自动属性 StateLights,赋一个字符串“StateLight_Yellow”
|entityType.StateLights = "StateLight_Yellow";|
StateLight_Yellow 表示为绿灯状态。
2,判断黄灯对象是否为空,不为空,则将其设置为 ture。
“entityType.Yellow.light.enabled = true;”打开黄灯
3,调用 LightState 类中,folat 类型的中间公共自动属性(RemainingTime)获取黄灯状
态的时限: entityType.RemainingTime = entityType.YellowLightTime;
进入 Execute()
1,设置黄灯状态剩余时间,Time .fixedDeltaTime 为固定的增量时间:
entityType.RemainingTime -= Time.fixedDeltaTime;
2,判断当前黄灯剩余时间是否小于等于 0,如果条件成立,再判断黄灯闪烁次数是否不等
于 1,如果条件成立,
则切换为黄灯闲置状态:
entityType.GetLight().ChangeState(IdleLight_State.Instance());
否则,切换为红灯状态:
entityType.GetLight().ChangeState(RedLight_State.Instance());
进入 Exit()
1,判断黄灯对象 Yellow 是否为 NULL,不为 NULL 时,条件成立,将黄灯关闭:
entityType.Yellow.light.enabled = false;
2,初始化黄灯闲置状态时限:
entityType.idleLightTime = 0.5f;
定义黄灯闲置状态类,继承 State并实现 State 中的抽象方法,Enter()(进入
状态)、Execute()(执行状态)、Exit()(退出状态)。设置单例模式:IdleLight_State。
进入 Enter()
1,调用 LightState 类中,folat 类型的中间公共自动属性(RemainingTime)获取黄灯闲
置状态的时限: entityType.RemainingTime = entityType.idleLightTime;
进入 Execute()
1,设置黄灯状态剩余时间,Time .fixedDeltaTime 为固定的增量时间:
entityType.RemainingTime -= Time.fixedDeltaTime;
2,判断当前黄灯闲置状态剩余时间是否小于等于 0,如果条件成立,则切换为黄灯闲置状
态:
entityType.GetLight().ChangeState(IdleLight_State.Instance());
进入 Exit()
1,黄灯闪烁次数,减 1:
entityType.next--;