寰子的高中生活

  C++博客 :: 首页 :: 联系 :: 聚合  :: 管理
  1 Posts :: 0 Stories :: 1 Comments :: 0 Trackbacks

公告

The Most Important time in my life : 2008.4.5 3:27

常用链接

留言簿(1)

我参与的团队

搜索

  •  

最新评论

 

用了很长时间去写GUI,最近终于完成了一套我比较满意的GUI系统。那么下一步面临的问题就是如何把GUI结合到游戏中去。因为网络游戏客户端通常变数很大,有可能在一次更新

中就有数个界面的修改。那么GUI系统和游戏引擎系统的结合灵活性要求则更高。如果把每一个界面写死,通常会降低一个游戏引擎的生命指数。那么面对这个问题,我想了以下办

法去解决它。

第一步:在GUI系统中增加两个方法

bool SetEventScript(const char* FileName);

const char* GetEventScript();

bool GetEventScriptAlter();

并且增加一个私有数据成员:

m_EventScript;   //GUI事件脚本
m_EventScriptAlter;  //GUI事件脚本是否被重新载入

当调用SetEventScript时,根据文件名打开脚本文件将脚本内容读入m_EventScript,并且将m_EventScriptAlter设置为true;当需要取得脚本内容时,使用GetEventScript取得,

取得后将会把m_EventScriptAlter设置为false。

第二步:建立游戏系统引擎的运行机制


我的运行机制是这样的,游戏开始时,使用游戏引擎类Sys_Init(配置文件名称)方法,读入第一个配置文件的内容,配置文件的名字是写在程序里的,如果文件名被修改或者文件

丢失,将无法开始游戏。如果程序检测到文件无法打开,就会终止游戏程序。

当程序打开时,游戏引擎类的Init方法会利用xolConfig从中取出一些必要的数据,比如窗口的宽高,是否全屏游戏,还有最重要的,游戏第一个界面的构造配置文件脚本的名称。

例如,配置文件内容如下:

<GameEngine>
 ScreenWidth=640;
 ScreenHeight=480;
 GUI=Source/GUI/Main.txt;
</GameEngine>

那么,它制定了游戏窗口宽、高以及第一个界面的构造脚本的路径,Sys_Init方法读出这段脚本后,会调用其GUI成员的LoadxConfig方法,将GUI的值传递给LoadxConfig。而

LoadxConfig载入的脚本,就是这第一个界面的配置脚本了,比如以上制定的文件Main.txt的内容是:


<#EventScript>
 Name=#EventScript;
 Value=Source/GUI/MainScript.txt;
</#EventScript>
<Back>
 Name=Back;
 Type=5;
 X=1;
 Y=1;
 WID=640;
 HEI=480;
 TexturePath=Source/xy0004.bmp;
</Back>

那么说明了,这组界面的事件脚本是:Source/GUI/MainScript.txt;那么GUI管理类会将它的内容调用SetEventScript读入到m_EventScript中供游戏引擎使用。
创建一个名为Back的GUI,类型是5(这个类型表示它是一个什么样的GUI,5=图片),它的位置是X1,Y1,宽高分别是640,480,它的图片路径是Source/xy0004.bmp。这样,程序就

会根据它的内容创建出一个UI界面。

游戏引擎中将有一个AngelScript的脚本解释器:m_ScriptEngine;

在游戏引擎的Update时,会调用GUI系统的GetEventScriptAlter方法检测脚本是否被重新载入,如果脚本重新载入,则执行以下代码:
r = m_ScriptEngine->AddScriptSection("GUIScript", "Game", m_GUI.GetEventScript(), strlen(m_GUI.GetEventScript), 0);

当发现GUI的LastEvent有事件时,根据GUI名字调用其事件相对的脚本中的函数。
比如,Button发生了MouseClick,就调用Button_Click。

好了,如上一来,游戏引擎和脚本系统就完美的结合到了一起。

 

posted on 2008-05-13 19:53 寰子ishere 阅读(511) 评论(1)  编辑 收藏 引用 所属分类: 游戏程序设计

Feedback

# re: 将GUI结合到游戏引擎中 2008-05-21 23:43 草根寺主人
很认真啊.....:)  回复  更多评论
  


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理