场景切换状态模式 这一章看了两遍
第一遍看了跟着做 第二遍又看了一回复习,
然后又跌跌撞撞的反复删了重写好几次 就跟背英语单词一样,有时候总是忘记下一步要写什么。。
场景切换状态模式 这一章看了两遍
第一遍看了跟着做 第二遍又看了一回复习,
然后又跌跌撞撞的反复删了重写好几次 就跟背英语单词一样,有时候总是忘记下一步要写什么。。
int arg那块突发奇想 将挂载的脚本中写一个枚举
然后把int arg 改成枚举类
将挂载的脚本中方法context.handle(枚举变量)丢入update中运行
public class StateA : IState
{
Context mContext;
public StateA(Context context) {
mContext = context;
}
public void Handle(GameState gameState)
{
Debug.Log("StateA.Handel"+ gameState);
if (gameState==GameState.MENU)
{
mContext.SetState(new StateB(mContext));
}
}
}
public enum GameState {
LOGO,
MENU,
GAME
}
public class UseDM : MonoBehaviour {
public GameState gameState;
Context context;
void Start () {
context = new Context();
context.SetState(new StateA(context));
}
private void Update()
{
context.Hanlde(gameState);
}
}
完整的看完了,现在对设计模式也是略懂。这里我整理以下我跟着siki老师做到最后,siki老师留下的bug和没做的。当然这毕竟是一个学习设计模式的Demo,不可能有多完整,有些可能只是我的强迫症吧2333.至少证明我认认真真看完了
bug并不太多,其实都看设计模式了,代码功底应该很强了。
1.用责任链模式做的关卡系统最后一关有空引用的bug,也就是没有判断当前关卡是不是最后一关,解决办法是判断下有没有下一关的引用,如果引用是null,则当前关是最后一关,完美解决。
2.兵营UI显示该兵种数量没有做。其实访问者模式已经把大体框架搭好了,只要加些参数,并将RunVisitor在往具体战士类重写,就做好了。
3.当前关卡显示。这也是一个小问题,有两个地方要显示更新关卡信息,一个是暂停页面GamePauseUI,一个是游戏状态页面GameStateInfoUI。这里我直接在这两个UI脚本注册NewStageSubject主题,就可以获取NewStageSubject里面的关卡信息解决。
4.暂停回到开始菜单逻辑,以及GamePaueseUI都没做。这个没啥说的,基本功。暂停 Time.timeScale = 0;就可以了。
5.战士UI显示。基本功,也没啥可说的。
6.个人强迫症,也就是游戏的完整逻辑。游戏胜利,游戏失败。胜利只有一种,那就是打到第9关胜利。失败就是总计敌人走到目标点。这里我用观察这模式写一个敌人到达终点的主题,让GameStateInfoUI注册这个主题,在EnemyChaseState里面判断敌人是否到达目标点,到达则发布主题,并且设置该敌人死亡。
最后,还是有一个小小的缺点,就是UML图画的太草率了,可能是为了照顾初学者。但类与类的六大关系实心空心聚合组合虚线实线箭头我觉得还是不能省略的。
yi'shang
也很方便,陕西人?
腾讯游戏,没钱玩你__23333
1.单一职责