组织项目结构总揽
完成一个好的项目就像盖房子,光有一流的工人师傅还不够,还需要将他合理分工,这样才能确保工程的有序进行,各负各的职责。一起的一个项目大致是这样的结构:
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所要做的就是根据配置初始化整个游戏,包括建立网络连接、初始的资源包解析等工作。
public 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;
}
}
……
}
{
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;
}
}
……
}