界面是游戏中必不可少的一部分,就算你进入游戏没有看到什么UI窗口,你也不必着急,因为多多少少都会有隐藏着的界面等你去体验。一个好的UI大部分应该归功于设计的人与提供美术支持的人员,因为他们是直接设计UI的人,而程序只提供一些显示的功能支持。本次用到的UI渲染为开源的CEGUI,想必很多做游戏的朋友都能耳熟能详了吧。好了,就让我们看看在本次设计中用到了那些与UI有光的方法吧。

CODE

模块ui 文件creature_headboard.h --对象头顶板UI

/**
* PAP Engine ( -- )
* $Id system.h
* @link -- for the canonical source repository
* @copyright Copyright (c) 2013-2014 viticm( viticm@126.com )
* @license
* @user viticm<viticm@126.com/viticm.ti@gmail.com>
* @date 2014-3-21 12:05:53
* @uses vengine ui system module
*/
#ifndef VENGINE_UI_SYSTEM_H_
#define VENGINE_UI_SYSTEM_H_ #include "vengine/config.h"
#include "vengine/game/itemtransfer_system.h"
#include "vengine/ui/creature_headboard.h" namespace vengine_ui { typedef enum {
kTalkTemplateNobody,
kTalkTemplateOther,
kTalkTemplateSelf,
kTalkTemplateMax
} talktemplate_enum; typedef enum {
kFilterTypeNone, //无类型
kFilterTypeChat, //聊天
kFilterTypeRole, //角色创建
kFilterTypeName, //命名
kFilterTypeStall, //摆摊
kFilterTypeMax
} filtertype_enum; typedef enum {
kFilterLevelNoMatch, //忽略
kFilterLevelPartMatch, //部分匹配
kFilterLevelFullMatch, //完全匹配
kFilterLevelMax
} filterlevel_enum; //static
const uint16_t kHelpStringMax = ;
static const char* kHelpStringKey = "help"; //this if have problem
//then change it to macros //interface for ui system
class VENGINE_API System : public vengine_kernel::Node{ VENGINE_KERNEL_DECLARE_DYNAMIC(vengine_ui_System); public:
virtual void on_windowsize_change(uint32_t message,
WPARAM wparam,
LPARAM lparam) = ; //窗口大小改变事件
virtual void injectinput() = ; //如果事件结果为true则获取了输入
virtual bool messageprocess(HWND hwnd,
uint32_t message,
WPARAM wparam,
LPARAM lparam) = ; //文字输入消息
virtual bool is_mousehover() = ; //鼠标是否在UI上空
//鼠标是否在聊天板上空
virtual bool is_mousehover_chatboard(int64_t x, int64_t y) = ;
//获得聊天信息里的超链接信息
virtual STRING get_chatboard_hyplink_content(int64_t x, int64_t y) = ;
//创建一个新的角色信息板
virtual CreatureHeadBoard* create_creature_headboard() = ;
//添加一个新的被击中信息框
virtual void add_behit_board(bool _double,
const char* info,
float startx,
float starty,
uint8_t type = ,
uint8_t movetype = ) = ;
virtual bool is_windowshow(const char* name,
const char* childname = NULL) = ;
virtual bool close_allwindow() = ;
//通知UI创建一组UI显示模型
virtual void fakeobject_show(const char* windowname, const char* name) = ;
//知UI销毁一组UI显示模型
virtual void fakeobject_destroy(const char* windowname,
const char* name) = ; //debugs
public:
virtual void debug_push_chatstring(const char* name,
const char* message) = ;
virtual void debug_save_fonttexture() = ; public:
virtual void change_dragflag(bool flag) = ;
virtual bool is_dragend() = ; public:
//逻辑层添加系统通知信息
virtual STRING parsestring_varparam(const char* id, ...) = ;
virtual void parsestring_nocolor(const STRING& in,
STRING& out,
bool control = false) = ;
virtual STRING parsestring_nocolor_varparam(const char* id, ...) = ;
virtual STRING parsestring_no_varparam(const char* id) = ;
virtual STRING parsestring_nocolor_no_varparam(const char* id) = ; //聊天模板字串的取得
virtual STRING get_talktemplate(const STRING& key, uint16_t index) = ;
virtual STRING modify_chattemplate(const STRING& temp,
const STRING& talker,
const STRING& target) = ;
virtual STRING get_talkrand_helpmessage() = ; //聊天随机提示消息
//查看当前获取输入的EditBox
virtual bool is_IME_editbox_active(const char* windowname) = ;
virtual int32_t get_current_IMEstate() = ; //获取当前输入法状态
virtual STRING get_IME_editbox_string(const char* name) = ; //获得输入内容 //传入一个物品信息
virtual bool inject_iteminfo(
vengine_game::ItemTransferSystem::element_t* element) = ; virtual void on_pushescape() = ;
virtual bool is_paopao_active() = ;
virtual uint32_t lumination_ogrecolor(uint32_t ogrecolor,
int32_t lumination) = ;
virtual int32_t ogrecolor_lumination(uint32_t ogrecolor) = ; //过滤字符串中的非法敏感字符
virtual bool check_stringfilter(
const STRING& in,
const filtertype_enum type = kFilterTypeNone) = ;
virtual bool check_stringcode(const STRING& in, STRING& out) = ;
//完全匹配过滤
virtual bool check_string_fullcompare(const STRING& in,
const STRING& filtertype = "all",
bool use_alltable = true) = ;
virtual STRING get_debugstring() = ; //取当前的鼠标下面的窗口
virtual void openwindow(const STRING& name) = ;
virtual void closewindow(const STRING& name) = ;
virtual void togglewindow(const STRING& name) =; virtual bool has_inputfocus() = ; //加聊天信息(提高显示聊天信息的效率)
virtual bool add_chathistory_message(int32_t id,
const char* windowname,
const char* message,
int32_t type = -,
uint32_t disappeartime = ) = ;
virtual void replacestring_usefilter(
const STRING& in,
STRING& out,
filtertype_enum filtertype = kFilterTypeChat) = ;
virtual STRING check_stringvalid(const char* string) = ;
virtual bool reload_windowscript(const STRING& windowname) = ;
virtual void uirender_toggleshow() = ;
}; }; //namespace vengine_ui #endif //VENGINE_UI_SYSTEM_H_

模块ui 文件system.h

/**
* PAP Engine ( -- )
* $Id system.h
* @link -- for the canonical source repository
* @copyright Copyright (c) 2013-2014 viticm( viticm@126.com )
* @license
* @user viticm<viticm@126.com/viticm.ti@gmail.com>
* @date 2014-3-21 12:05:53
* @uses vengine ui system module
*/
#ifndef VENGINE_UI_SYSTEM_H_
#define VENGINE_UI_SYSTEM_H_ #include "vengine/config.h"
#include "vengine/game/itemtransfer_system.h"
#include "vengine/ui/creature_headboard.h" namespace vengine_ui { typedef enum {
kTalkTemplateNobody,
kTalkTemplateOther,
kTalkTemplateSelf,
kTalkTemplateMax
} talktemplate_enum; typedef enum {
kFilterTypeNone, //无类型
kFilterTypeChat, //聊天
kFilterTypeRole, //角色创建
kFilterTypeName, //命名
kFilterTypeStall, //摆摊
kFilterTypeMax
} filtertype_enum; typedef enum {
kFilterLevelNoMatch, //忽略
kFilterLevelPartMatch, //部分匹配
kFilterLevelFullMatch, //完全匹配
kFilterLevelMax
} filterlevel_enum; //static
const uint16_t kHelpStringMax = ;
static const char* kHelpStringKey = "help"; //this if have problem
//then change it to macros //interface for ui system
class VENGINE_API System : public vengine_kernel::Node{ VENGINE_KERNEL_DECLARE_DYNAMIC(vengine_ui_System); public:
virtual void on_windowsize_change(uint32_t message,
WPARAM wparam,
LPARAM lparam) = ; //窗口大小改变事件
virtual void injectinput() = ; //如果事件结果为true则获取了输入
virtual bool messageprocess(HWND hwnd,
uint32_t message,
WPARAM wparam,
LPARAM lparam) = ; //文字输入消息
virtual bool is_mousehover() = ; //鼠标是否在UI上空
//鼠标是否在聊天板上空
virtual bool is_mousehover_chatboard(int64_t x, int64_t y) = ;
//获得聊天信息里的超链接信息
virtual STRING get_chatboard_hyplink_content(int64_t x, int64_t y) = ;
//创建一个新的角色信息板
virtual CreatureHeadBoard* create_creature_headboard() = ;
//添加一个新的被击中信息框
virtual void add_behit_board(bool _double,
const char* info,
float startx,
float starty,
uint8_t type = ,
uint8_t movetype = ) = ;
virtual bool is_windowshow(const char* name,
const char* childname = NULL) = ;
virtual bool close_allwindow() = ;
//通知UI创建一组UI显示模型
virtual void fakeobject_show(const char* windowname, const char* name) = ;
//知UI销毁一组UI显示模型
virtual void fakeobject_destroy(const char* windowname,
const char* name) = ; //debugs
public:
virtual void debug_push_chatstring(const char* name,
const char* message) = ;
virtual void debug_save_fonttexture() = ; public:
virtual void change_dragflag(bool flag) = ;
virtual bool is_dragend() = ; public:
//逻辑层添加系统通知信息
virtual STRING parsestring_varparam(const char* id, ...) = ;
virtual void parsestring_nocolor(const STRING& in,
STRING& out,
bool control = false) = ;
virtual STRING parsestring_nocolor_varparam(const char* id, ...) = ;
virtual STRING parsestring_no_varparam(const char* id) = ;
virtual STRING parsestring_nocolor_no_varparam(const char* id) = ; //聊天模板字串的取得
virtual STRING get_talktemplate(const STRING& key, uint16_t index) = ;
virtual STRING modify_chattemplate(const STRING& temp,
const STRING& talker,
const STRING& target) = ;
virtual STRING get_talkrand_helpmessage() = ; //聊天随机提示消息
//查看当前获取输入的EditBox
virtual bool is_IME_editbox_active(const char* windowname) = ;
virtual int32_t get_current_IMEstate() = ; //获取当前输入法状态
virtual STRING get_IME_editbox_string(const char* name) = ; //获得输入内容 //传入一个物品信息
virtual bool inject_iteminfo(
vengine_game::ItemTransferSystem::element_t* element) = ; virtual void on_pushescape() = ;
virtual bool is_paopao_active() = ;
virtual uint32_t lumination_ogrecolor(uint32_t ogrecolor,
int32_t lumination) = ;
virtual int32_t ogrecolor_lumination(uint32_t ogrecolor) = ; //过滤字符串中的非法敏感字符
virtual bool check_stringfilter(
const STRING& in,
const filtertype_enum type = kFilterTypeNone) = ;
virtual bool check_stringcode(const STRING& in, STRING& out) = ;
//完全匹配过滤
virtual bool check_string_fullcompare(const STRING& in,
const STRING& filtertype = "all",
bool use_alltable = true) = ;
virtual STRING get_debugstring() = ; //取当前的鼠标下面的窗口
virtual void openwindow(const STRING& name) = ;
virtual void closewindow(const STRING& name) = ;
virtual void togglewindow(const STRING& name) =; virtual bool has_inputfocus() = ; //加聊天信息(提高显示聊天信息的效率)
virtual bool add_chathistory_message(int32_t id,
const char* windowname,
const char* message,
int32_t type = -,
uint32_t disappeartime = ) = ;
virtual void replacestring_usefilter(
const STRING& in,
STRING& out,
filtertype_enum filtertype = kFilterTypeChat) = ;
virtual STRING check_stringvalid(const char* string) = ;
virtual bool reload_windowscript(const STRING& windowname) = ;
virtual void uirender_toggleshow() = ;
}; }; //namespace vengine_ui #endif //VENGINE_UI_SYSTEM_H_

SIMPLE

天龙八部的UI

总结

因为是接口所以只提供了核心的管理方法,UI是个比较繁琐的模块,一般都是配合脚本一起使用,CEGUI自己就集成了脚本绑定,有了解的应该知道。在这里我不再多讲UI的什么知识,希望大家看一下注释的每条方法的用处。UI模块有单独的一个库vgui(微gui)来控制,咱们到时候再详细探讨这里面的问题。下节讲的是声音模块。

MMORPG大型游戏设计与开发(客户端架构 part10 of vegine)的更多相关文章

  1. MMORPG大型游戏设计与开发(客户端架构 part8 of vegine)

    脚本模块是游戏设计中争论比较多的话题,那是因为作为脚本本身所带来的利弊.其实这都无关紧要,取舍是人必须学会的一项技能,如果你不会取舍那么就让趋势给你一个满意的答复.自从魔兽世界以及传奇(世界)问世以来 ...

  2. MMORPG大型游戏设计与开发(概述)updated

    1.定义 MMORPG,是英文Massive(或Massively)Multiplayer Online Role-PlayingGame的缩写,即大型多人在线角色扮演游戏. 2.技术与知识 在这系列 ...

  3. MMORPG大型游戏设计与开发(UI SYSTEM SHOW)

    接下来一段时间,这些文件可能不再更新,期间我会学习和掌握一些前端知识.虽然我非常欣赏剑侠网络版叁和九阴真经的画面,但是那是一个庞大的游戏引擎,一般人是无法窥伺的,除非你是天才而且要拥有机器毫无中断的毅 ...

  4. MMORPG大型游戏设计与开发(服务器 游戏场景 核心详述)

    核心这个词来的是多么的高深,可能我们也因为这个字眼望而却步,也就很难去掌握这部分的知识.之所以将核心放在最前面讲解,也可以看出它真的很重要,希望朋友们不会错过这个一直以来让大家不熟悉的知识,同我一起进 ...

  5. MMORPG大型游戏设计与开发(游戏服务器 游戏场景 概述 updated)

    我们在玩游戏的时候,我们进入游戏后第一眼往往都是看到游戏世界中的场景,当然除了个别例外,因为那些游戏将游戏场景隐藏了起来,如文字游戏中的地点一样.既然我们接触了游戏世界的核心,那么作为核心的场景又包括 ...

  6. MMORPG大型游戏设计与开发(客户端架构 part12 of vegine)

    在游戏中的交互过程中输入是一个必不可少的过程,比如登陆的时候需要用户输入用户名与密码,就算是单机游戏很多时候也要求用户输入一个用户名作为存档的依据.网络游戏中没有了输入,只用鼠标来交互是不切实际的,因 ...

  7. MMORPG大型游戏设计与开发(客户端架构 part2 of vgui)

    这一节我将讲解vgui的基础系统部分,也是该库提供给外部使用的一些重要接口.作为UI部分比较重要的部分,该节有着至关重要的部分,如果没有看到上一节内容,请留意下面的连接.我们现在可以猜想一下在客户端U ...

  8. MMORPG大型游戏设计与开发(客户端架构 part16 of vegine)

    由于近来比较忙碌和有些困倦的原因,所以关于这部分的文章没有及时更新,一句话:让朋友们久等了!今天所讲的是客户端vengine(微引擎)中最后一个部分,就像上节所说,这一部分的内容比较多.可能有些朋友看 ...

  9. MMORPG大型游戏设计与开发(客户端架构 part9 of vegine)

    时间在人们的生活中是多么重要的东西,如果打乱了时间,不知道这个时间会成什么样子.在客户端中,自然也有时间模块,因为不同的时间可能会处理不同的事情,特别是在追求高度自由化的同时,时间也成为了一个很重要的 ...

  10. MMORPG大型游戏设计与开发(客户端架构)

    首先为所有等待的朋友说一声歉意,实在让大家等的太久.客户端的设计本来就是一个大的工程,而且工作的关系,也没有太多时间在这方面做研究.不过在私下有空的时间,我还是继续着这方面的研究,很遗憾没有用期望的o ...

随机推荐

  1. SQL SERVER常用定义查询

    https://msdn.microsoft.com/en-us/library/ms175081.aspx

  2. VS2010添加类失败问题,弹出错误框,提示 CodeModel操作失败,无法访问标记数据库

    我在使用VS2010添加类的时候,会弹出一个错误框,提示 CodeModel操作失败,可以无法访问标记数据库 英文版是 CodeModel operation failed,Possibly cann ...

  3. 基于RulesEngine的业务规则实现

    规则引擎由推理引擎发展而来,是一种嵌入在应用程序中的组件,实现了将业务决策从应用程序代码中分离出来,并使用预定义的语义模块编写业务决策.接受数据输入,解释业务规则,并根据业务规则做出业务决策.比较常见 ...

  4. 使用虚拟按钮(Ghost Buttons)的25个网站

    2014年已经过去大半年了,我们看到网页设计领域出现新的设计趋势. 虚拟按钮(Ghost Buttons)是指具备基本的按钮形状的透明按钮,但有细实线的边框.有些虚拟钮是互动的,点击之后按钮可能会成为 ...

  5. 12款免费的 WordPress 响应式主题下载

    最流行的内容管理系统(WordPress)和最流行的网页设计技术(响应式设计)结合会是什么样的呢?下面这个列表收集了12款响应式的 Wordpress 主题,能够带给你不一样的网站体验. 您可能感兴趣 ...

  6. ionic rang在弹出modal中不可拖拽的问题

  7. “破解大牛是怎么炼成的”之壳与ESP定律

    文章难易度:★★★ 文章阅读点/知识点:逆向破解 文章作者:Sp4ce 文章来源:i春秋   关键字:网络 信息安全技术 本文参与i春秋社区原创文章奖励计划,未经许可禁止转载! 一.前言 通过前面几篇 ...

  8. WCF服务配置编辑器使用

    学习wcf,特别是初学者,配置文件很难搞懂,有点复杂,自己手动配置哪有这么多精力啊,这不是吃的太饱了吗,所以学会使用配置编辑器是必须的,下面是学习的流程图. 打开工具的wcf服务配置编辑器,点击文件= ...

  9. OC 类方法,对象方法,构造方法以及instancetype和id的异同

    OC 类方法,对象方法,构造方法以及instancetype和id的异同 类方法: 类方法是可以直接使用类的引用,不需要实例化就可以直接使用的方法.一般写一些工具方法. 类方法: 声明和实现的时候,以 ...

  10. iOS之 C++与oc混编

    声明:本文只是随笔,自己做个笔记方便以后查阅如要转载,注明出处.谢谢! 2016年第一篇随笔!!! 由于最近要搞一个项目用到c++的一些api所以要混编,于是就记录下这个过程中的一些细节上的东西! O ...