设计模式之状态模式
来源:互联网 发布:亚马逊云计算业务 编辑:程序博客网 时间:2024/05/17 09:05
调用:
public class GameLoop : MonoBehaviour{ private SceneStateController controller = null; void Awake() { DontDestroyOnLoad(this.gameObject); } void Start() { controller = new SceneStateController(); controller.SetSceneState(new StartState(controller), false); } void Update() { controller.StateUpdate(); }}
SceneStateController:
public class SceneStateController{ private AsyncOperation mAO = null; private bool isRunStart = false; // 该SceneStateController所拥有的SceneSatte private ISceneState mSceneState; public void SetSceneState(ISceneState sceneState, bool isLoadScene = true) { if (mSceneState != null) { mSceneState.StateEnd(); } this.mSceneState = sceneState; if (isLoadScene == false) { isRunStart = false; mSceneState.StateStart(); } else { mAO = SceneManager.LoadSceneAsync(mSceneState.MSceneName); isRunStart = true; } } public void StateUpdate() { if (mAO != null && mAO.isDone == false) return; if (isRunStart == true && mAO != null && mAO.isDone == true) { mSceneState.StateStart(); isRunStart = false; } if (mSceneState != null) { mSceneState.StateUpdate(); } }}
ISceneState:
public class ISceneState{ // 该SceneState所属于的SceneStateController protected SceneStateController mController; private string mSceneName; public string MSceneName { get { return mSceneName; } } public ISceneState(string sceneName, SceneStateController controller) { this.mSceneName = sceneName; this.mController = controller; } public virtual void StateStart() { } public virtual void StateUpdate() { } public virtual void StateEnd() { }}
StartState:
public class StartState : ISceneState{ private Image mLogo; private float mSmoothTime = 0.008f; private float mWaitTime = 2; public override void StateStart() { mLogo = GameObject.Find("Logo").GetComponent<Image>(); mLogo.color = Color.black; } public override void StateUpdate() { mLogo.color = Color.Lerp(mLogo.color, Color.white, mSmoothTime); mWaitTime -= Time.deltaTime; if (mWaitTime < 0) { mController.SetSceneState(new MainMenuState(mController), true); } } public StartState(SceneStateController controller) : base("01StartScene", controller) { }}
MainMenuState:
public class MainMenuState : ISceneState{ public MainMenuState(SceneStateController controller) : base("02MainMenuScene", controller) { } public override void StateStart() { GameObject.Find("Button").GetComponent<Button>().onClick.AddListener(OnStartButonClick); } private void OnStartButonClick() { mController.SetSceneState(new BattleState(mController)); }}
BattleState:
public class BattleState : ISceneState{ public BattleState(SceneStateController controller) : base("03BattleScene", controller) { }}
阅读全文
0 0
- 设计模式之状态模式
- 设计模式之状态模式
- 设计模式之状态模式
- 设计模式之状态模式
- 设计模式之状态模式
- 设计模式之状态模式
- 设计模式之状态模式
- 设计模式之状态模式
- 设计模式之状态模式
- 设计模式之状态模式
- 设计模式之状态模式
- 设计模式之--状态模式
- 设计模式之状态模式
- 设计模式之状态模式
- 设计模式之状态模式
- 设计模式之状态模式
- 设计模式之状态模式
- 【设计模式】之状态模式
- GIT学习笔记(7)
- Retrofit+RXJava的使用
- 管理站点
- Go游戏服务器开发的一些思考(二十一):Go语言的两处脑残设定
- [arc077e]guruguru
- 设计模式之状态模式
- caioj·1070 动态规划入门(二维一边推3:字符距离)
- HTML部分基础总结(7)
- jdk环境变量配置-Windows平台
- 真●总结
- poj3278 抓牛(bfs)
- 利用UiAutomator写一个自动遍历渠道包关键功能的脚本
- 理解虚拟机中的四种网络连接方式
- Java 核心技术第十版 中文 卷1 怎样解压“分卷”的压缩文件