OGRE之简易地模拟人物退格血条

从源代码开始构建Ogre图文教程(Ogre 1.8 Source + VS2010) //--------------------------------------------------------------------------------------------------------------------------------------------------- //前言:捣鼓了一整天Ogre源代码下引擎环境的构建,从官网WIKI到百度, //再到谷歌,结合 阅读详情


写在前面:

首先,在制作该人物血条前,我需要声明以下几点:

1.人物的血条属于简易制作的退格方式,不是连续的进度条类型。

2.该血条制作纯属快速开发完成,没有达到精细的程度,高手可以绕道。


以以上两点为前提,我粗略的讲述一下我在OGRE中用CEGUI制作血条的过程。

首先,人物头像我用了一张比较炫的魔剑士的图片:

(背景透明)



紧接着,为了配合整体色调,我我选取了一种紫色的血条单元:


有了血条单元(这里我称之为紫星),之后,用图片制作工具拼接制作了11张图片,

从0星紫星一直到10星紫星,取名为purple_x.jpg(x为紫星数量),为了便于理解,这里附

一张九星紫星的图片:


到此为止,素材准备好了,便开始在OGRE中完成我的程序部分了,

以下是我完成图片,文字,及窗口绘制部分的代码,我将其封装在一个函数中:

(CEGUI为0.8.3版本)

//-------------------------------------【CreateSrcBloodShowW()函数】-------------------------------------
// Desc:创建主模型血量显示的窗口
//------------------------------------------------------------------------------------------------------
void NinthCEGUI::CreateSrcBloodShowW(float ratio /* = 1.6f */)
{
	CEGUI::WindowManager& wmgr = CEGUI::WindowManager::getSingleton();
	
	//创建退格血条,血量数量,人物头像三个窗口
	m_BloodW = wmgr.createWindow("WindowsLook/StaticImage", "Beyond/Blood");
	m_BloodNumW = wmgr.createWindow("OgreTray/StaticText", "Beyond/BloodNum");
	m_HeadW = wmgr.createWindow("WindowsLook/StaticImage", "Beyond/head");

        //载入相关图片
	CEGUI::ImageManager::getSingleton().addFromImageFile("head", "head.png");
	for (size_t i = 0; i <= 10; i++)
		CEGUI::ImageManager::getSingleton().addFromImageFile("purple"+
		Ogre::StringConverter::toString(i), "purple_"+ Ogre::StringConverter::toString(i)+".jpg");
	//将图片添加到窗口中
	MyCEGUISystem::getSingletonPtr()->addImageToWindow(m_HeadW, "head", 0.0f, 0.0f, 0.16f/ratio, 0.16f);
	MyCEGUISystem::getSingletonPtr()->addImageToWindow(m_BloodW, "purple10", 0.11f / ratio, 0.085f, 0.25f/ratio, 0.035f);
	m_BloodNumW->setArea(CEGUI::UDim(0.135f / ratio, 0), CEGUI::UDim(0.05f, 0), 
		CEGUI::UDim(0.5f / ratio , 0), CEGUI::UDim(0.04f, 0));

        //去除头像窗口的边框,并设置背景为透明
        m_HeadW->setProperty("FrameEnabled", "false");
        m_HeadW->setProperty("BackgroundEnabled", "false");
	//去掉血量窗口的文本边框和背景,设置文本为浅紫色
	m_BloodNumW->setProperty("FrameEnabled", "false");
	m_BloodNumW->setProperty("BackgroundEnabled", "false");
	m_BloodNumW->setProperty("TextColours", "tl:FFFFAAFF tr:FFFFAAFF bl:FFFFAAFF br:FFFFAAFF");

	//添加到根窗口
	CEGUI::Window* root = CEGUI::System::getSingleton().getDefaultGUIContext().getRootWindow();
	root->addChild(m_BloodW);
	root->addChild(m_BloodNumW);
	root->addChild(m_HeadW);
}

我在退格血条的上方显示了血量的具体数值,为了配合整体色调,将其设置为浅紫色,

以下是我自己封装完成的MyCEGUISystem中的addFromImageFile和addImageToWindow具体细节:

//----------------------------------【addFromImageFile()函数】--------------------------------------
// Desc:添加一张图片
//--------------------------------------------------------------------------------------------------
void MyCEGUISystem::addFromImageFile(const CEGUI::String& imageName, const CEGUI::String& fileName)
{
	CEGUI::ImageManager::getSingleton().addFromImageFile(imageName, fileName);
}
//----------------------------------【createImageWindow()函数】-------------------------------------
// Desc:创建静态图片窗口
//--------------------------------------------------------------------------------------------------
void MyCEGUISystem::addImageToWindow(CEGUI::Window* window,const CEGUI::String& imageName, 
	float left /* = 0.0f */, float top /* = 0.0f */, float width /* = 1.0f */, float height/* = 1.0f */)
{
	window->setArea(CEGUI::UDim(left, 0.0f), CEGUI::UDim(top, 0.0f),
		CEGUI::UDim(width, 0.0f), CEGUI::UDim(height, 0.0f));
	window->setProperty("Image", imageName);
}


之所以CreateSrcBloodShowW()函数中使用ratio参数是因为适应游戏窗口的变化,以致于人物头像和血条不至于变形,

这里的ratio=窗口宽度/窗口高度。


-------------------------------------------------------------------------------------------------------------------------------

人物头像,血量,血条的创建部分描述过了,接下来便讲述一下人物血量及血条的更新显示部分,

以下是frameRenderingQueued()中相关部分的核心代码:

	//血量及退格血条更新
	m_NinthCEGUI->getSrcBloodNumW()->setText(m_RoleName + ":" + Ogre::StringConverter::toString((int)m_HP));
	static int ibloodPart = -1;
	int i = 0;
	while (1)
	{
		if (m_HP <= i * MODEL_MAX_BLOOD / 10)
		{
			if (ibloodPart != i)
			{
				m_NinthCEGUI->getSrcBloodW()->setProperty("Image", "purple" + Ogre::StringConverter::toString(i));
				ibloodPart = i;
			}
			else
				break;
		}
		else
		{
			i++;
			if (i > 10)
				break;
		}
	}

有了以上代码,便会在每一帧中更新人物的血量,一旦退格血条越出了血量每X/10(X=0,1,2...9)边界,便会自动更新绘制并显示。


最后,我附上一张完整的整体效果图以便于大家理解:







关于CEGUI环境搭建的图文教程(主要致力于OGRE1.9.0) (声明:以下教程针对于OGRE1.9.0和VS2012下的CEGUI构建生成,并非局限于这种方式,但本教程只致力于该方式) 在开始搭建之前,请确保我们所要使用的工具,以下列出所需工具及下载地址: 1.CEGUI 0.8.3 SRC(含CMakeLists的源代码,主要支持于CMAKE下的平台SDK构建) 2.cegui-deps-0.8.x-src...(CEGUI搭建所需的未生成依 阅读详情

相关推荐

关于OGRE四元数和旋转的一些浅显认识`

对于OGRE四元数原理的理解,

指月的手指,成不了月亮,更得不到月亮!! 8490

基于 OGRE 粒子系统的喷泉模拟

自:http://tc.uc.cn/?v=1&src=l4uLj8XQ0JLRm5Ccx8fRnJCS0I%2FSyM7GyM%2FPzM7Jyc7MydGXi5KT&restype=1&ucshare=1&ucshareplatform=6&country=cn&os=adr&pf=m9eC3e756L8%3D

易龙元泰的专栏 805

OGRE之第一个程序

首先,此程序运行在 OGRE1.9SDK+VS2012环境

指月的手指,成不了月亮,更得不到月亮!! 7435

OGRE引擎详解:技术特点、优势、局限性与应用场景

OGRE(Object-Oriented Graphics Rendering Engine,面向对象的图形渲染引擎)是一款开源的3D图形引擎,广泛应用于游戏开发、模拟、虚拟现实等多个领域。OGRE引擎的设计目标是提供一个高效、灵活且易于使用的渲染引擎,以支持开发人员在不同平台上创建复杂的3D图形应用程序。

小宝哥Code的专栏 2928

科技中介服务机构想要提升服务效率,需要哪些数智工具支持?.docx

科技中介服务机构想要提升服务效率,需要哪些数智工具支持?

西门子PLC1200 1214C DC/DC/DC 驱动步进电机

控制电机旋转的指令在“指令”中的“工艺”下的“Motion Control”(若出现程序块无法调用情况,则看备注3的第4条),本篇只介绍常用指令(若想学习详细与更多指令,请参考指令手册)。

2301_79553921的博客 1万+

NGUI研究院之3D模型坐标转2D屏幕坐标-血条

刚好今天有朋友问我,比较典型的例子就是游戏里面人物的血条。原理很简单就是把3D点换算成2D的点,但是由于NGUI自身是3D所以我们需要先把NGUI下的点转成2D点,然后在把他转成3D的点。听起来有点绕,不要紧我直接上代码。 目前我一直都是用NGUI来做人物血条,但是2D血条都会有个限制,就是它不能和模型有遮挡关系。不过血条可以根据人物的位置调节,比如远一点的人物血条会小一些,近一点的人物血条

ybhjx的专栏 956

Cadence IC617仿真实践:有源电流镜的共模抑制比优化策略

本文基于Cadence IC617平台,详细介绍了有源电流镜共模抑制比(CMRR)的仿真与优化全流程。从电路搭建、DC工作点分析到AC仿真获取差模/共模增益,逐步解析CMRR计算方法。核心优化策略包括提升电流镜输出阻抗、优化差分对匹配性及调整晶体管尺寸,并探讨了与电源抑制比(PSRR)的权衡,为模拟集成电路设计提供实用指南。

weixin_29313817的博客 183

Ogre输出屏幕2d文字(Overlay文字)

转载自:http://blog.youkuaiyun.com/chunyexiyu/article/details/40961259参考: http://www.cnblogs.com/wanghao111/archive/2009/08/11/1543495.html 参考:http://www.cnblogs.com/gogoplayer/archive/2008/05/09/1189795.html

善战者无赫赫之功 的专栏 966

单细胞RNA测序数据分析与可视化:从基础原理到高级应用

单细胞RNA测序(scRNA-seq)技术通过解析单个细胞的基因表达谱,显著提升了我们对细胞异质性的理解。本文详细介绍了scRNA-seq数据分析的完整流程,包括数据预处理、质量控制、降维、聚类、差异表达分析、细胞类型注释、细胞周期分析、轨迹分析、RNA速率分析、基因集富集分析、细胞通讯分析、批次效应校正以及空间转录组学整合。文章还展示了scrna_toolkit包在简化分析流程和增强数据可视化方面的应用。通过这一工具,研究者可以更高效地处理单细胞数据,揭示复杂的生物学信息。未来,该工具将进一步整合多组学分

2301_80338712的博客 4132

无人机WIFI集群组网技术详解及成本分析

无人机WIFI集群组网技术是指利用无人机作为移动平台,通过集成高性能的WIFI模块,实现多架无人机之间以及无人机与地面控制站之间的无线通信组网。在协议层面,无人机WIFI集群组网需要遵循标准的无线通信协议,如IEEE 802.11系列(即WIFI标准),同时可能还需定制或优化路由协议、媒体访问控制(MAC)协议等,以确保高效、可靠的数据传输。数据安全与隐私保护:无人机集群组网中传输的数据可能涉及敏感信息,需采取加密、认证等安全措施,确保数据传输的安全性和用户隐私的保护。根据性能不同,价格差异较大。

专注多旋翼、复合翼无人机技术研究,从事低空经济行业。 1584

用CEGUI绘制环形进度条和雷达扫描(技能CD)效果

CEGUI还是一套蛮好用的GUI系统的,但是有一个缺陷就是它所有的控件都是用的矩形,如果想做出不规则的图形比较麻烦。最近想出一个用CEGUI实现圆形进度条的方案。就是采用遮罩手段。 1. 新建一个类ImageGenerator,采用单例模式,内部提供各种图形的绘制算法,并生成可直接用于绘制的Texure,其工作原理是从Texure 中获取保存数据的数组,然后根据其大小定义一个同样大小...

weixin_34291004的博客 203

Unity3D 2022版如何一键安装Newtonsoft.Json?最新Package Manager教程

本文详细介绍了在Unity3D 2022及以上版本中,如何通过Package Manager一键安装和配置Newtonsoft.Json(Json.NET)。教程涵盖了从打开Package Manager、搜索并安装正确包源,到验证安装和基础使用的完整流程,旨在帮助开发者以现代化、可靠的方式集成这一强大的JSON处理框架,提升开发效率并规避手动导入的常见问题。

lg888的博客 921

Ogre异常处理回顾

Ogre 异常处理          Ogre用c++内建的异常处理机制来处理错误 使用异常处理的好处          首先,使用异常 处理了,可以使得C++程序的两个部分相互通信(这两个部分通常是分别开发的)。检测到异常的部分可以抛出异常,而另一部分可以捕获异常并做出处理。          其次,使用异常处理,可以避免用返回值来定义错误,当有错误发生的时候,一个异常就会被抛出,这个

胖大星的博客 1268

美团mtgsig 1.2算法分析

mtgsig1.2的一些算法总结

记录一些web逆向的过程 3503

开源模型应用落地-qwen模型小试-入门篇(二)

在windows环境下,使用transformer设置模型参数/System Prompt/历史对话

以微薄之力,予他人些许温暖. 3237

CEGUI实现一套游戏UI

<br />  使用了CEGUI , LUA , XML实现了一个还算灵活强大的GUI系统。并实现了一套简单UI

试试 1204

基于DeepFashion2数据集的服装检测系统:YOLOv11实现与UI界面开发

80万张高质量服装图片13个服装类别:短袖上衣、长袖上衣、短袖外套、长袖外套、背心、短裤、长裤、短裙、长裙、袜子、帽子、鞋、包包每张图片包含边界框、分割掩码、landmarks等标注多样化的场景:商业图片、街拍图片、消费者图片更高效的Backbone网络改进的特征金字塔网络(FPN)自适应训练样本分配策略更精确的损失函数以下是YOLOv11的模型定义:python复制下载# 模型参数self.nc = nc # 类别数。

YOLO 455

cegui实现帧动画

cegui已经是一个功能比较强大的界面编辑器,实现帧动画自然没什么难度。本帖希望对刚学cegui的新手有帮助~_~第一步:准备一张图片。最好是一张包含几个小相同的小图像, 这些图像连续播放可以产生动画.第二步: 将目标图像生成CEGUI的纹理.相关示例代码如下:CEGUI::Imageset* pImgSet = NULL;if (!CEGUI::ImagesetManager

howlet2的专栏 4328

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

关于Ogre 1.9 SDK + VS2012 OGRE环境搭建的图文教程

1.首先需要准备预编译的OGRE SDK以及相关的VS系列开发集成环境IDE。 你可以选择 OGRE 1.9 SDK for Visual C++ 2008 (32-bit) 或者 OGRE 1.9 SDK for Visual C++ 2010 (32-bit) 或者 OGRE 1.9 SDK for Visual C++ 2012 (32-bit) 。 (注意事项:最好不要尝

指月的手指,成不了月亮,更得不到月亮!! 1万+

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

OGRE之跳出漫长的编译等待

当你新建一个OGRE项目时是否发现那漫长的编译等待时间几乎让你崩溃? 当你修改代码不断进行调试时是否因为那漫长的编译等待而让你烦恼? 如果是,那么请继续往下看,您将受益匪浅。 --------------------------------------------------------------- ----------------------------------------

指月的手指,成不了月亮,更得不到月亮!! 4429

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

OGRE之资源读取进度条的实现

解析SampleBrowser项目的SampleBrowser.h文件,我们可以发现其中有这么一个函数:

指月的手指,成不了月亮,更得不到月亮!! 3793
上一篇: 网游原来可以这样玩,你见过吗?
下一篇: InstallShield LE在VS2013下的安装部署(图文教程)
Beyond我爱杨
博客等级 码龄13年 36粉丝 39原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值