HGE 系列教材(7) --- 使用 Helper Classes

简介: 字体的使用: 1. 头文件 #include <hgeFont.h> 2. 载入字体 hgeFont* pFont; pFont = new hgeFont("font1.fnt");   // 不要忘记 delete fnt 文件是一个字体描述文件(font description file),可以通过创作工具产生 3. 打印字体 pFont->prin

字体的使用:

1. 头文件

#include <hgeFont.h>

2. 载入字体

hgeFont* pFont;

pFont = new hgeFont("font1.fnt");   // 不要忘记 delete

fnt 文件是一个字体描述文件(font description file),可以通过创作工具产生

3. 打印字体

pFont->printf(5, 5,
    HGETEXT_LEFT,
    "dt:%.3f/nFPS:%d (constant)",   // 使用中文将出现“??”
    pHGE->Timer_GetDelta(),
    pHGE->Timer_GetFPS()

);

在渲染函数中打印文字,HGE 到目前版本 1.81 依然不支持中文,只能使用第三方支持。建议使用微妙的平衡(BOGY)提供的解决方案。

 

粒子系统的使用:

1. 建立一个 hgeSprite 对象,hgeSprite 类的构造函数如下:

hgeSprite(
HTEXTURE tex,   // 纹理的句柄
float x,   // sprite 对应的纹理的 x 坐标
float y,   // sprite 对应的纹理的 y 坐标(区别于顶点中的纹理坐标,这里无需规格化坐标间隔)
float w,   // sprite 的宽
float h   // sprite 的高
);

注意,sprite 对应的纹理的坐标,是 sprite 的左上的坐标。由此可见,一个精灵对应了纹理中的一个四边形区域,实际的源码中,sprite 类含有一个 hgeQuad 成员变量。

如果 tex 为 0,那么就使用白色作为纹理的数据(texture data)

hgeSprite* pSpt = new hgeSprite(tex, 32, 32, 32, 32);

2. 设置混合模式,根据情况设置混合模式,后面详细讨论:

pSpt->SetBlendMode(BLEND_COLORMUL | BLEND_ALPHAADD | BLEND_NOZWRITE); // 建议使用 BLEND_ALPHAADD,这样看起来效果会好很多(增亮)。

3. 设置锚点(似乎和函数名字有点不符)

void SetHotSpot(
float x,   // 锚点的 x 坐标
float y   // 锚点的 y 坐标
);

锚点是这样的一个点:进行一些操作的中心点。例如进行旋转操作的中心点,即旋转操作依赖于这个点。通常设置 sprite 的中心点为锚点。

4. 关联 hgeParticleSystem

pPar = new hgeParticleSystem("trail.psi", m_pSpt);    // 关联 hgeParticleSystem

psi 文件被称之为粒子系统描述文件(particle system description file),这个文件是 hgeParticleSystemInfo 结构对象的硬盘镜像,这里不做详细介绍。

5. 粒子系统中的基本参数介绍:

系统生命周期(System lifetime):粒子系统的生命周期,在这个周期内会产生新粒子

Emission:每秒产生多少个新的粒子

粒子生命周期(Particle lifetime):特定的某个粒子的生命周期

6. 设定 Emission:

pPar->info.nEmission=10;

7. 调用 Fire 函数

pPar->Fire() 函数会重启粒子系统,但它不会影响当前活跃粒子

8. 渲染

pPar->Render();

9. MoveTo 函数

pPar->MoveTo(x, y); 用于移动粒子系统到(x,y)处

10. Update 函数

pPar->Update(m_pHGE->Timer_GetDelta());

在帧函数中应该调用 Update 且使用参数为 m_pHGE->Timer_GetDelta()

 

使用 hgeSprite 渲染:

前面说了为了渲染,使用了 hgeQuad,那样做是复杂的,我们完全可以使用 sprite 来实现,而不需要使用到过多的 Core Functions 层的函数。

1. 创建 sprite

pSpt = new hgeSprite(tex, 96, 64, 32, 32);

2. 设置颜色

pSpr->SetColor(0xFFFFA000);

SetColor 函数将为 sprite 添加颜色,添加的方式由混合模式决定,设置混合模式,通过调用函数 pSpr->SetBlendMode 实现。

注意,这里设置的颜色是 sprite 中 hgeQuad 对象的顶点的颜色,四个顶点颜色将设为相同,而混合模式设置的是 sprite 中的 hgeQuad 对象的 blend 值。

pSpr->SetBlendMode(BLEND_COLORMUL | BLEND_ALPHAADD | BLEND_NOZWRITE); // 这里使用的纹理是 alpha 通道渐变,颜色为白色的纹理,因此会使用到 BLEND_COLORMUL,这点在《HGE 系列教材(5) --- 输入、声音和渲染》做了详细的说明

3. 设置锚点:

pSpr->SetHotSpot(16, 16);

4. 渲染

在渲染函数中,调用 pSpr->Render(x, y); 方可

相关文章
|
测试技术 API C++
[Eigen中文文档] 扩展/自定义Eigen(一)
在本节中,将介绍如何向MatrixBase添加自定义方法。由于所有表达式和矩阵类型都继承自MatrixBase,因此将方法添加到MatrixBase会立即使其对所有表达式可用!一个典型的用例是,使Eigen与另一个API兼容。
635 0
|
5天前
|
云安全 人工智能 安全
AI被攻击怎么办?
阿里云提供 AI 全栈安全能力,其中对网络攻击的主动识别、智能阻断与快速响应构成其核心防线,依托原生安全防护为客户筑牢免疫屏障。
|
15天前
|
域名解析 人工智能
【实操攻略】手把手教学,免费领取.CN域名
即日起至2025年12月31日,购买万小智AI建站或云·企业官网,每单可免费领1个.CN域名首年!跟我了解领取攻略吧~
|
9天前
|
安全 Java Android开发
深度解析 Android 崩溃捕获原理及从崩溃到归因的闭环实践
崩溃堆栈全是 a.b.c?Native 错误查不到行号?本文详解 Android 崩溃采集全链路原理,教你如何把“天书”变“说明书”。RUM SDK 已支持一键接入。
606 214
|
存储 人工智能 监控
从代码生成到自主决策:打造一个Coding驱动的“自我编程”Agent
本文介绍了一种基于LLM的“自我编程”Agent系统,通过代码驱动实现复杂逻辑。该Agent以Python为执行引擎,结合Py4j实现Java与Python交互,支持多工具调用、记忆分层与上下文工程,具备感知、认知、表达、自我评估等能力模块,目标是打造可进化的“1.5线”智能助手。
849 61
|
7天前
|
人工智能 移动开发 自然语言处理
2025最新HTML静态网页制作工具推荐:10款免费在线生成器小白也能5分钟上手
晓猛团队精选2025年10款真正免费、无需编程的在线HTML建站工具,涵盖AI生成、拖拽编辑、设计稿转代码等多种类型,均支持浏览器直接使用、快速出图与文件导出,特别适合零基础用户快速搭建个人网站、落地页或企业官网。
1252 157
|
4天前
|
编解码 Linux 数据安全/隐私保护
教程分享免费视频压缩软件,免费视频压缩,视频压缩免费,附压缩方法及学习教程
教程分享免费视频压缩软件,免费视频压缩,视频压缩免费,附压缩方法及学习教程
241 138
|
7天前
|
存储 安全 固态存储
四款WIN PE工具,都可以实现U盘安装教程
Windows PE是基于NT内核的轻量系统,用于系统安装、分区管理及故障修复。本文推荐多款PE制作工具,支持U盘启动,兼容UEFI/Legacy模式,具备备份还原、驱动识别等功能,操作简便,适合新旧电脑维护使用。
522 109