直接把软件界面做成游戏界面。CEGUI 专用游戏界面开发库。

2023-11-09

下载:
http://www.cegui.org.uk/wiki/index.php/Downloads

更多中文教程
http://www.ispinel.com/2010/05/26/971

首先感谢李素颙同学的热心和耐心指导。


做游戏或者计算机图形程序,GUI是重要的一个环节,假如你的时间足够多的话,或许你可以自己写一个符合自己的GUI系统,但是假如你想要使用现成的GUI系统并且还要有很多不错的功能的话,CEGUI是个不错的选择的。

尽管CEGUI有着各种各样的让人无法忽视的弊病,但是最重要的是:这是免费的,而且有一个不错的编辑器CElayoutEdtior,尽管这个编辑器时常崩溃和各种各样的错误让人挠头.


免费的GUI系统或许还有其他选择,比如MyGUI,BetaGUI等等,但是CEGUI却是相对比较出色的一个.


如何得到CEGUI?请前来这里下载:http://www.cegui.org.uk

你可以在这里下载SDK和原始码,同时还有CEGUI的各种各样的皮肤,以及那个著名的编辑器CELayoutEdtior.


不幸的是,似乎身处中国大陆我并不能打开CEGUISkin皮肤页面http://skins.cegui.org.uk/,当我FQ之后却打开一切正常,难道是被GFW屏蔽了么?对此感到无语。

假如现在你仍然不知道GFW是什么,那么或许有两种可能:一,你没有生活在中国大陆。二,你还没具有一个大陆网民的基本素质。


本文档的目的:在于让你快速的熟悉CEGUI的基本使用,同时可以让一个对CEGUI完全不熟悉的人在很短的时间内就能自行的创建一个简单的内容,假如你已经对CEGUI有着基本的熟悉,那么本文档已经不再适合你了。


本文档采用CEGUI SDK 0.7.1,里面的部分内容已经不再和老版本的CEGUI SDK0.6.2相兼容,请升级SDK到最新版本.


下面让我们进入正题。


二、环境配置

你使用什么开发环境,就得下载符合这个开发环境的SDK,我下载的是CEGUI 0.7.1 Binary Downloads for Microsoft Visual C++ 2008


注意,这份文档教授的是快速上手CEGUI,因此已经略去了如何教你下载SDK的原始码自行编译的部分,直接下载以及编译好的SDK,这样会省事很多,当然,假如你想要更多了解,你可以尝试下载原始码,自行编译一下.


下载完成解压到任何目录,将CEGUI-SDK-0.7.1-vc9目录,CEGUI-SDK-0.7.1-vc9\RendererModulesCEGUI-SDK-0.7.1-vc9\dependencies\include还有CEGUI-SDK-0.7.1-vc9\cegui\include目录一起加入VisualStudio Include包含路径。

同时还要把CEGUI-SDK-0.7.1-vc9\dependencies\lib\dynamicCEGUI-SDK-0.7.1-vc9\dependencies\lib\staticCEGUI-SDK-0.7.1-vc9\lib加入VisualStudio Lib包含目录,这样就完成了CEGUI开发环境的配置.


三、
开始前的一点准备

渲染环境是基于OpenGL制作的GLUTGLUT 也是一个非常快速的搭建OpenGL环境的东西,能够让你避免还得自己去处理Windows消息循环,等等一大堆烦人的东西,并且,GLUT是开源而且跨平台的。


当然,CEGUI是支持DirectXOGRE引擎渲染模式的,这里我们采用了OpenGL渲染模式.


下面让我们开始最快速的部分,当然首先你得包含头档和Lib档。


请为了避免缺少头档包含而出的错误,建议直接把这些全部写上去吧:

#include <dependencies\include\GL\freeglut.h>

#include <CEGUI.h>

#include <CEGUIWindowRenderer.h>

#include <CEGUIResourceProvider.h>

#include <CEGUIDefaultResourceProvider.h>

#include <RendererModules\OpenGL\CEGUIOpenGL.h>

#include <RendererModules\OpenGL\CEGUIOpenGLRenderer.h>

#include <XMLParserModules\XercesParser\CEGUIXercesParser.h>

#include <CEGUIXMLParser.h>

#include <CEGUISystem.h>

#include <CEGUIInputEvent.h>

#include <CEGUIWindow.h>

#include <CEGUIWindowManager.h>

#include <CEGUISchemeManager.h>

#include <CEGUIFontManager.h>

#include <elements/CEGUIFrameWindow.h>


同时你得包含Lib文件:

#pragma comment(lib"CEGUIBase_d.lib")

#pragma comment(lib"CEGUIOpenGLRenderer_d.lib")

#pragma comment(lib"CEGUIXercesParser_d.lib")

 

“_d”表示这是Debug模式,假如你想Release了,那么就包含没有”_d”.

 

同时可以这样:using namespaceCEGUI;

 

四、
开始动手吧,不过之前得有一点小准备

下面我们开始实际的编码了,首先得初始化CEGUI,创建一个渲染对象。


CEGUI::OpenGLRenderer *myRenderer;

 

这句话是声明一个OpenGL的渲染对象,也只能有这一个对象。

接着你得创建OpenGL渲染环境:

myRenderer = &CEGUI::OpenGLRenderer::create();

CEGUI::System::create(*myRenderer);

 

OK,现在我们创建好了基本的渲染环境,注意,创建的这部分代码仅仅适用于CEGUI SDK 0.7.1版本,并不适用于CEGUI SDK 0.6.2.


一个GUI系统,得需要有资源,比如脚本,用编辑器做好的菜单文件,图片以及字体什么的,所以下一步你得设置这些GUI资源的目录。


所以接着你得写如下代码用来设置资源:目录


CEGUI::DefaultResourceProvider*rp = static_cast<CEGUI::DefaultResourceProvider*>(CEGUI::System::getSingleton().getResourceProvider());

 


rp->setResourceGroupDirectory("schemes""datafiles/schemes/");


rp->setResourceGroupDirectory("imagesets","datafiles/imagesets/");


rp->setResourceGroupDirectory("fonts""datafiles/fonts/");


rp->setResourceGroupDirectory("layouts""datafiles/layouts/");


rp->setResourceGroupDirectory("looknfeels","datafiles/looknfeel/");


rp->setResourceGroupDirectory("lua_scripts","datafiles/lua_scripts/");

 


// 使用Xerces作为XML解析器


rp->setResourceGroupDirectory("schemas","http://www.cnblogs.com/XMLRefSchema/");



CEGUI基于强大的设计思想,只要少量的修改或扩充,几乎可以实现现存国内外任何一款3D网游的界面。
这是一张大图:

2011040121373956.png

主要实现的功能有:
1基础控件
2具有wow外观的的Frame窗口
3拖曳控件
4拖曳控件的buffer显示,其实是饼图的pregress,及buffer完成后的高亮闪烁
5血量不足时的心跳效果
6根据不同网速显示的设置按钮
7wow效果的拖曳控件
8吟唱技能条
9高光效果
9聊天向下指示箭头的闪烁
11小地图
12任务面板
13目标的目标
14wow效果的聊天界面
15快键栏

wow的技能吟唱条实现
技能条上的亮条通过高光贴图实现,加载完成后的高亮贴图也是高光贴图,最后通过改变alpha值实现淡入淡出。
=================

本地化支持:OGRE+CEGUI中文输入:OGRE方面的问题      

本文原文发表在http://www.ogre3d.org.cn
代码还没有上传上去,全文也没有写完,先转载过来一章,供大家拍砖。

本地化支持:OGRE+CEGUI中文输入:OGRE方面的问题
From OGRE 3D 中文网
Jump to: navigation, search
其实从许久以前的版本开始,CEGUI基本上已经成为官方制定的GUI系统,并在OGRE的演示程序中使用(能得到同等待遇的似乎只有ODE物理引擎)。 
而中文输入这种关联与GUI的事件,已经基本上和OGRE引擎没有多少关系了。但是这里仍然有几件事情需要我们注意。 

从CEGUI版本0.4.x 迁移到版本0.5.x 
OGRE 引擎对CEGUI的支持是通过一个叫做OgreGUIRenderer.dll的插件来完成的,你可以在OGRE提供的SDK中找到这个文件。不过到目前为止,官方之提供了对0.4.0版本CEGUI的支持。似乎为了保持版本的稳定性,目前还看不出来OGRE官方对这个插件的升级计划。 
0.4.0也是一个不错的CEGUI版本(我没有用过,纯属瞎说),但是对于中文支持有一个致命的弱点,那就是不支持分页对文字的读取。中文常用汉字就有上千个,再分为不同的字体,对内存的占用量是无法接受的。CEGUI版本0.5.0已经解决了这个问题。 
这时候就需要我们继承革命前辈“自己动手丰衣足食”的优良传统了。根据OGRE官方论坛提供的方法,我们对OgreGUIRenderer.dll插件进行一次手术。让其适配CEGUI版本0.5.x。 
首先需要下载OGRE引擎的源代码和相应的依赖包,我这里使用的平台是WindowsXP+Visual Studio2005(VC8.0)。 
解压完源代码并配置好依赖项目,你会看到OgreCEGUIRenderer项目(ogrenew\Samples\Common\CEGUIRenderer),然后进行如下修改: 
文件OgreCEGUITexture.h,第109行, 
virtual void loadFromMemory(const void* buffPtr, uint buffWidth, uint buffHeight);
改为 
virtual void loadFromMemory(const void* buffPtr, uint buffWidth, uint buffHeight, PixelFormat pixelFormat = CEGUI::Texture::PF_RGBA);

文件OgreCEGUITexture.cpp,第144行, 
void OgreCEGUITexture::loadFromMemory(const void* buffPtr, uint buffWidth, uint buffHeight)
改为 
void OgreCEGUITexture::loadFromMemory(const void* buffPtr, uint buffWidth, uint buffHeight, PixelFormat pixelFormat)

相同文件,第167行 
d_ogre_texture = TextureManager::getSingleton().loadRawData(getUniqueName(), "General", odc, buffWidth, buffHeight, PF_A8R8G8B8, TEX_TYPE_2D, 0, 1.0f);
改为 
d_ogre_texture = TextureManager::getSingleton().loadRawData(getUniqueName(), "General", odc, buffWidth, buffHeight, pixelFormat == CEGUI::Texture::PF_RGB ? PF_R8G8B8:PF_A8R8G8B8, TEX_TYPE_2D, 0, 1.0f);
然后去CEGUI网站上下载最新0.5.x版本的CEGUI库,覆盖OGRE相应的CEGUI依赖文件(包括头文件以及lib、dll文件)。编译生成新的OgreGUIRenderer.dll,如果你觉得这个过程很麻烦,那么可以到这里下载。 
后遗症是因为CEGUI版本接口的变动,之前OGRE所提供的Demo中使用CEGUI部分会无法编译通过。 
得到Win32系统消息 
我们这里有两种得到Win32系统消息的办法,一种是好的,一种是简单的。请根据实际情况选择相应的方法: 
好的方法 
OGRE 3D是一个跨平台的引擎,所以平台相关的操作自然要封装在具体的实现里面。这样就等于说,用户在使用中无法了解具体的平台相关信息。对于跨平台的设计来说这样做是合理的,但是对于一些需要得到系统消息的项目来说,就有一些特殊需要了。 
OGRE 项目并不是没有顾全到这种情况,因此提供了两种不同的创建窗口办法,简单的方法是Demo中所使用的,委托OGRE创建并维护窗口。另外一种方法是手动创建窗口,之后交给OGRE引擎用来渲染,并手动维护。手动维护窗口虽然比较麻烦,但是这样可以更自由的控制窗口,换句话说可以简单得得到任何窗口信息,包括消息。 
创建窗口不是一个困难的过程,但是却是麻烦。在这里交给读者作为作业来做吧(我还没抽出时间来实现呢)。然后通过下面的方法来初始化渲染窗口: 
//假设之前已经执行完创建窗口以及Ogre::Root对象的过程
//hWnd为窗口句柄,root为Ogre::Root类型实例
Ogre::NamevaluePairList params;//构造参数
std::stringstream ss;
ss<<hWnd;//窗口句柄
params["externalWindowHandle"] = ss.str();//把窗口句柄做为字符串形势设置到参数中
root->initialise(false);//Ogre::Root对象初始化参数为false,表示手动创建渲染窗口
//下面创建渲染窗口
Ogre::RenderWindow * window = _root->createRenderWindow("name", //名称
    width,//宽度
    height, //高度
    false, //是否全屏显示
    &params);

这样就能把手动创建的窗口交给Ogre进行渲染操作,代价是你作为窗口的拥有者应该管理窗口的一切行为。这是一个正规的方法,任何真正的项目都应该遵守尽量不要破坏库的封装。 
简单的方法 
也可以称作懒人的方法,或者免费打工仔偷懒的方法。极力不推荐,但这里的演示却是用它。我知道这有一些矛盾,但作为只是想要测试中文输入功能的工作来说,还勉强算说得过去。 
这种方法就是破坏OGRE引擎的封装,通过直接修改OGRE源代码来得到已经被封装好的Win32窗口消息。我不会在这做太多地介绍,因为你马上会看到相应的源代码,没有什么难度,只要覆盖OGRE工程中相应的文件就可以了。 
http://ogre3d.org.cn/wiki/index.php?title=%E6%9C%AC%E5%9C%B0%E5%8C%96%E6%94%AF%E6%8C%81:OGRE%2BCEGUI%E4%B8%AD%E6%96%87%E8%BE%93%E5%85%A5:OGRE%E6%96%B9%E9%9D%A2%E7%9A%84%E9%97%AE%E9%A2%98

转载于:https://www.cnblogs.com/rogee/archive/2011/04/01/2002698.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

直接把软件界面做成游戏界面。CEGUI 专用游戏界面开发库。 的相关文章

  • 如何配置 nginx 重写规则以使 CakePHP 在 CentOS 上运行?

    大家好 请帮帮我 我正在尝试在运行 Nginx 和 Fact CGI 的 Centos 服务器上设置 cakephp 环境 我已经在服务器上运行了一个 WordPress 站点和一个 phpmyadmin 站点 因此我已经正确配置了 PHP
  • Laravel Eloquent 预加载:加入同一个表两次

    我有一个users表和一个约会桌子 在约会表中 我有两个用户 ID customer id staff id 我想检索所有带有客户姓名和员工姓名的约会 users table id name appointments table id st
  • AWS S3从本地主机批量上传php错误

    我在尝试着批次 散装从本地主机 xampp 上传到我的S3 bucket 它似乎适用于大约 6 个项目 然后我收到一条错误消息 cURL 错误说Failed sending network data from http curl haxx
  • PHP-MySQLi 连接随机失败并显示“无法分配请求的地址”

    大约两周以来 我一直在处理 LAMP 堆栈中最奇怪的问题之一 长话短说 与 MySQL 服务器的随机连接失败并显示错误消息 Warning mysqli real connect HY000 2002 Cannot assign reque
  • Symfony2,如何向表单添加隐藏的日期类型字段?

    我正在尝试以下场景 In myclassType public function buildForm FormBuilder builder array options builder gt add day hidden gt add da
  • zend 表单验证

    我想知道 Zend Form 如何验证输入 我的意思是它如何知道要验证哪些输入字段 我查看了 php 全局变量 POST GET 但没有看到任何设置为标识符 例如 的内容 以便了解如何验证 有人能给我推荐一些关于这些东西的指南吗 好吧 找出
  • 如何在没有 session_destroy 的情况下销毁 Zend_Session_Namespace

    我使用以下方法在临时会话中存储一些值 job new Zend Session Namespace application 我如何只销毁会话应用无需清除所有会话 要从会话中删除值 请对对象属性使用 PHP 的 unset 函数 假设 job
  • 查明具有特定 ID 的会话是否已过期

    我正在创建一个上传功能 将用户上传的文件存储在服务器上 并以用户的会话 ID 作为名称 现在 我只想将此文件保留在服务器上 直到该会话处于活动状态 所以 我的问题是 如何根据会话 ID 确定会话是活动的还是过期的 以便在后一种情况下我可以安
  • PHP Github Pull 脚本错误“权限被拒绝(公钥)”

    我已经设置了一个 PHP 脚本来执行 GitHub 拉取 这包含在我的 Github 文件夹中 home mysite public html github github pull php 我的服务器已经有 SSH 公钥 就像我执行git
  • PHP 中的静态类初始值设定项

    我有一个带有一些静态函数的辅助类 类中的所有函数都需要一个 重 初始化函数来运行一次 就好像它是一个构造函数 有实现这一目标的良好实践吗 我唯一想到的就是打电话init函数 如果它已经运行过一次 使用静态 initialized变种 问题是
  • localhost/live - 通过 HTTP_HOST 检测

    假设我在本地开发并在实时服务器上调试小东西 在我的代码中添加这样的内容是个好主意吗 is local strpos SERVER HTTP HOST localhost false define DEBUG is local 然后在设置内容
  • 通过 post 使用 php 发送 XML

    我知道有很多类似的问题 但我尝试过摆弄所有的解决方案 但似乎无法使其发挥作用 我正在尝试将 xml 直接发布到 Web 服务并获得响应 从技术上讲 我正在尝试连接到freightquote com 您可以在右上角找到该文档this http
  • 将 Cloudinary 与 spatie/media-library Laravel 包一起使用

    有人使用 Laravel 包 spatie media library 和 Cloudinary 吗 我认为用 Flysystem 来实现它是微不足道的 我实际上使用 Cloudinary 作为带有 silvanite nova field
  • Gearman,php 扩展问题:使用终端在 .. 中找不到类“GearmanWorker”,但可以在浏览器上使用

    我最近在 ubuntu 10 04 上安装了 gearman 并安装了它的 pecl 扩展 现在 当我在浏览器中运行一个 php 文件时 其中包含 client new GearmanWorker die var Dump client I
  • Yii 未检测到骆驼案例操作

    伊伊正在给我404 Error如果我声明这样的操作 站点控制器 php public function actionRegisterUser 这就是我在main php label gt Register User url gt site
  • PHP-如何根据条件配对数组中的项目

    如何将数组中的项目配对 假设我有一个数组Fighters 我想根据他们的情况将他们配对Weights 体重最接近的拳手应作为配对最佳匹配 但如果他们是在同一个团队中 他们不应该配对 团队 1 战斗机A体重为60 战斗机B体重为65 2队 战
  • 使用 Xpath 进行部分匹配

    我正在尝试创建一个搜索功能 允许使用 Xpath 按歌曲标题或流派进行部分匹配 这是我的 XML 文件
  • WordPress - 类别和子类别的嵌套列表

    我正在尝试显示带有嵌套子类别的 WordPress 类别列表 到目前为止 我只能获取父类别列表或不包括父类别的子类别列表 但我无法将两者连接在一起 这是我想要创建的结果 Parent Category 子类别 子类别 Parent Cate
  • sqlite3和pdo_sqlite有什么区别

    我正在将我的 Web 应用程序从 MySQL 迁移到 SQLite 数据库 我发现有两个 PHP 扩展用于与 sqlite 通信 php sqlite3 dll and php pdo sqlite dll 什么扩展比较好 或者另一个问题
  • Google Drive 服务帐户上传的位置

    我正在尝试使用服务帐户将文件上传到我的 Google 云端硬盘 当我部署此代码时 我不希望用户给予授权 我希望他们上传到我的帐户 我通过 PHP 使用它 下面是我到目前为止的情况 这段代码是基于官方文档给出的例子 当我运行 php 脚本时

随机推荐

  • Spring注解@Lazy

    Spring注解 Lazy 一 Lazy注解 1 Lazy注解作用 lazy 翻译过来是 懒惰的 Lazy 懒加载 该注解用于惰性加载初始化标注的类 方法和参数 在Spring中常用于单实例Bean对象的创建和使用 单实例Bean懒加载 容
  • c编译时的错误:程序中有游离的‘\240’‘\302’‘\XXX 时解决方案

    偶尔从网上看到不错的源码 想研究下 不幸编译时遇到 错误 程序中有游离的 240 302 之类的错误 大量的源码不可能再全部重敲一遍 经过一番研究 终于让我找到简单的解决方案 还是本着让后人少走弯路的想法 分享下 首先 编译器提示的 xxx
  • 给本科实验室的分享PPT-21.7.23

    谢邀 讨论一些学习 兴趣和人生 该分享主要面向实验室的大一 大二同学 时间 2021 7 23
  • Arthas 是Alibaba开源的Java诊断工具

    Arthas 是Alibaba开源的Java诊断工具 深受开发者喜爱 当你遇到以下类似问题而束手无策时 Arthas可以帮助你解决 这个类从哪个 jar 包加载的 为什么会报各种类相关的 Exception 我改的代码为什么没有执行到 难道
  • Linux FB 的学习

    linux FB 是CPU 到显示器中的中间人 像一个池子一样 CPU 将操作好的数据项放到池子中 然后再将这些数据显示到屏幕上 它的好处在于 用户可以将FB看成一个显示内存的映射 当将其映射到用户进程空间是可以直接进行读写操作 操作的方式
  • 无尽神域服务器维护,关于对无尽神域的感受亲爱的无尽神域开发团队:

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 关于对无尽神域的感受 亲爱的无尽神域开发团队 你们好 我是一位无尽神域的普通玩家 首先感谢你们能开发出这么一款我个人认为的优质游戏 从公测到现在玩的这十几天了 好的体验有很多 也有些希望开发团队
  • 我从未结束的Java之旅

    目录 开篇 毕业 第一份工作的结束 大胆北漂 第一次在北京租房 供应链 新的开始 好景不长 餐饮 误打误撞 线上事故 事故原因 复盘 开篇 简单的做个自我介绍 码龄九年 主要从事java开发 对前端和python略有了解 是一个技术不精湛但
  • C#位运算相关知识梳理

    位和字节的介绍 位 b 也叫比特位 是计算机数据最小的单位 用二进制0和1来存储 字节 byte 1 byte 8 b 一个字节 8位 字符 char 1 char 2byte 16b 1个字符 2 个字节 16位 KB 1KB 1024b
  • 最新信息安全毕设选题题目推荐

    0 简介 毕业季马上就要开始了 不少同学询问学长网安专业选题以及开题相关的问题 今天跟大家分享信息安全毕设选题 最新的信息安全 网络安全 专业毕设选题 难度适中 适合作为毕业设计 大家参考 学长整理的题目标准 相对容易 工作量达标 题目新颖
  • linux视频教程

    这15 张光盘最为值得推荐的是国嵌的视频教程 其中的一些wince资料以及中嵌的视频教程也比较适合初学者 国嵌视频教程由嵌入式Linux专业培训机构成都国嵌公司免费提供的4个培训班完整最新视频 总共包含4张DVD光盘 76个视频文件 总时长
  • VC++6.0的兼容性问题解决方案

    VC6 0 能够在 XP 下很好的运行 无需进行额外的设置 但在 Win7 Win8 和 Win10 下 安装完成后还要修改兼容模式才可以 在Win7或Win10下使用VC6 0 对于Win7和Win10 需要将VC6 0的兼容模式修改为
  • Jupyter Notebook查看文件

    Jupyter Notebook查看文件 打开dos 输入Jupyter Notebook 打开dos 切换到ipynb文件所在路径下 输入Jupyter Notebook Jupyter Notebook 看到图片都丢失了 返回上一级的目
  • WSL——Kali子系统安装及其相关配置

    Kali子系统安装及其相关配置 一 WSL简介 二 开启WSL功能 三 安装kali子系统 四 安装Windows Terminal 五 对Kali的设置 1 更换更新源 2 安装完整版Kali 六 配置图形化桌面并连接 1 下载 X410
  • mac下编译安装php7.4.5及相关扩展安装

    php7 4 5下载地址 https www php net distributions php 7 4 5 tar gz MAC版本 macOS catalina 10 15 4 编译参数 configure prefix Users m
  • 【ML】对数据处理的几种方法

    数据处理的几种方式 1 All in 2 Backward Elimination 后退梯度 3 Forward Elimination 前进梯度 4 Bidirectional Elimination 比较梯度 5 Score Compa
  • gin框架27--自定义 HTTP 配置

    gin框架27 自定义 HTTP 配置 介绍 案例 说明 介绍 本文主要介绍如何自定义HTTP配置 在gin框架中可以直接使用 http ListenAndServe 来实现 案例 源码 package main import github
  • react中,useState异步更新带来的问题,怎么解决

    React 的 useState 是异步更新状态的 但是有时候我们需要在状态更新后执行一些操作 如果直接使用 setState 可能会导致状态的更新不及时 此时可以使用以下几种解决方案 使用 useEffect 来监听状态的变化 并在其中执
  • WeOpen Good 开源公益计划正式启动!聚开源智慧·行科技向善

    PART 1 缘起和初心 8 15 20 当看到这些数字 你第一时间会想到什么 少 不足一提 亦或是什么呢 1 我们生活的地球上 有超过 70 亿人口 其中 10 亿以上的人 也就是相当于总人口约 15 的人有某种形式的残疾 2 世界范围内
  • linux的自旋锁struct spinlock_t的使用

    在linux中提供了一些机制用来避免竞争条件 最简单的一个种就是自旋锁 例如 当一个临界区的数据在多个函数之间被调用时 为了保护数据不被破坏 可以采用spinlock来保护临界区的数据 当然还有一个就是信号量也是可以实现临界区数据的保护的
  • 直接把软件界面做成游戏界面。CEGUI 专用游戏界面开发库。

    下载 http www cegui org uk wiki index php Downloads 更多中文教程 http www ispinel com 2010 05 26 971 首先感谢李素颙同学的热心和耐心指导 做游戏或者计算机图