silverlight游戏设计(七)--项目组织

组织项目结构总揽
完成一个好的项目就像盖房子,光有一流的工人师傅还不够,还需要将他合理分工,这样才能确保工程的有序进行,各负各的职责。一起的一个项目大致是这样的结构:
imagesilverlight游戏设计(七)--项目组织
GameLibrary:作为整个游戏所需要的基础库和游戏引擎。当然实际中的会包括许多library。
GameBiz:游戏的逻辑,并作为游戏执行入口,它向UI注册事件,通过基础库和游戏引擎构建业务逻辑。引用GameLibrary等基础库和GameUI。
GameUI:只引用silverlight本身必须的库以及项目的自定义控件库
GameLoader:游戏的引导器或者叫做加载器,参见之前的文章:silverlight游戏设计(一)主程序加载器。
GameLibrary
如果说一个游戏是人的身体,那么游戏的基础库和引擎就是五脏六腑,它驱动着整个身体的运转。这部分是游戏的底层核心,对于mmorpg webgame而言,至少要包括网络通讯,util/extensions,安全(比如加密解密)、资源包操作管理、各种精灵角色及精灵控制、场景等。
GameBiz
有了五脏六腑,还需要个充满智慧、逻辑性的大脑,要么岂不成了行尸走肉。这部分是一个具体的游戏逻辑的实现就相当于人的大脑,像下饮用GameLibrary,像上引用GameUI,作为游戏的入口点。
之前我们说到,webgame应该是有一个loader,在下载完所需的模块后动态的创建游戏主体,那么具体怎么联系到GameBiz呢?我们只需要约定一个接口,在将游戏运行的所必须的所有assembly加载到程序域中后调用下这个接口,将游戏的配置传递过去就ok。
var gameApp= asm.CreateInstance("GameBiz.GameApp") as GameApp;
gameApp.StartGame(gameConfig)
GameApp.StartGame所要做的就是根据配置初始化整个游戏,包括建立网络连接、初始的资源包解析等工作。
imagesilverlight游戏设计(七)--项目组织imagesilverlight游戏设计(七)--项目组织GameApppublic class GameApp { public static readonly GameApp Instance; static GameApp() { Instance = new GameApp(); } public void StartGame(GameConfig config) { //…… } public UIElement GameMainUI { get; } public void AlterRootVisual() { AlterRootVisual(GameMainUI); } public void AlterRootVisual(UIElement newRoot) { App.Current.RootVisual = newRoot; } } …… }

让GameBiz关联UI
在初始化完我们的游戏核心和逻辑后就要呈现游戏界面了,很简单只需设置Application.RootVisual这个属性,在代码中调用:
App.Current.RootVisual = ……//你的游戏主窗口。 那么我们的UI怎么来呢,需要有一个视图容器对所有UI引用进行管理,比如这里我写一个GameUIContainer的单例(IoC或者单例引用依据个人偏好,这里为了方便用单例做示范)。
GameUIContainerpublic class GameUIContainer { public static readonly GameUIContainer Instance; static GameUIContainer() { Instance = new GameUIContainer(); } /** * 游戏的主窗口,或是第一个显示在玩家眼前的界面 * / MainFace GameMainFace { get; internal set; } …… }

好了,这样我们就能在GameBiz模块中通过这个视图容器来控制游戏的界面的显示。
ok,项目划分好了,美术&程序员们专心的去做GameUI这块,核心研发们去弄GameLibrary这块,负责游戏逻辑的同志去弄GameBiz,您的游戏项目开发正在有序进行……:-)
Tags: 

延伸阅读

最新评论

发表评论