zoukankan      html  css  js  c++  java
  • GameFramework摘录

    GameFramework的模块密封性相当好,如果使用unity的assemblydef,其设计可以把框架项目与自己的游戏逻辑分离开来。
    除一些常用的基类、枚举等,核心模块设置为internal权限,密封在框架项目中。
    在游戏逻辑需求时,通过入口类GameFrameworkEntry获取

    其对外接口由interface定义,如EventManager的实现:

    namespace GameFramework.Event
    {
    	public internal IEventManager
    	{
    		int EventHandlerCount
    		{
    			get;
    		}
    		
    		int EventCount
    		{
    			get;
    		}
    		
    		// ...
    	}
    
    	internal sealed class EventManager : GameFrameworkModule, IEventManager
    	{
    		// ...
    	}
    }
    

    接口IEventManager实际在整个框架内只用了一次,并没有起到interface通常的“抽象”功能,而是作为从外部到框架模块的入口。

    public static class GameFrameworkEntry
    {
        public static T GetModule<T>() where T : class
        {
            Type interfaceType = typeof(T);
            if (!interfaceType.IsInterface)
            {
                throw new GameFrameworkException("...");
            }
            
            if (!interfaceType.FullName.StartsWith("GameFramework."))
            {
                throw new GameFrameworkException("...");
            }
    
            string moduleName = string.Format("{0}.{1}", interfaceType.Namespace, interfaceType.Name.Substring(1));
            Type moduleType = Type.GetType(moduleName);
            if (moduleType == null)
            {
                throw new GameFrameworkException("...");
            }
    
            return GetModule(moduleType) as T;
        }
    }
    

    可以看出, GameFramework.Event.IEventManager只是GameFramework.Event.EventManager的对外接口
    在使用框架时

        IEventManager mgr = GameFrameworkEntry.GetModule<GameFramework.Event.IEventManager>();
        Console.WriteLine(mgr.EventHandlerCount);
    
  • 相关阅读:
    [atAGC049E]Increment Decrement
    [atARC099F]Eating Symbols Hard
    [atARC099E]Independence
    [Codeforces] Codeforces Round #456
    Treap
    Splay树
    [Offer收割]编程练习赛42
    [Codeforces]Good Bye 2017
    Codeforces Round #455
    Educational Codeforces Round 35
  • 原文地址:https://www.cnblogs.com/lunoctis/p/12022928.html
Copyright © 2011-2022 走看看