HGE 系列教材(7) --- 使用 Helper Classes
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); 方可
OC:关于Category、load、initialize的那些事你还记得吗? 这篇文章主要分析Category的实现原理,load方法和initialize方法调用方式、调用时机、调用顺序、以及他们的区别,解释 Catgory 与 class Extension 有什么区别。
相关文章
- Netgear 网件系列路由器救砖工具
- Yzncms系列教程(九):自定义字段的使用方法
- 【系列教程】多线程实现都需要注意什么?
- 淘宝客系统教学系列_1.简单介绍和平台搭建
- 【云安全最佳实践】技术栈系列基础篇6-iptables
- TSF微服务治理实战系列(四)——服务安全
- flutter系列之:深入理解布局的基础constraints
- Prometheus监控实战系列十三:告警管理
- 系统分析师案例必备知识点汇总---2023系列文章二
- 系统分析师案例必备知识点汇总---2023系列文章三
- UML系列(1):认识UML踏入设计之路
- SpringCloudAlibaba入门系列(2) - 微服务环境搭建
- C++ 不知算法系列之深入动态规划算法思想
- PGL图学习之基于UniMP算法的论文引用网络节点分类任务[系列九]
- 火山引擎增长系列沙龙 | 上海,我们来了!
- flutter系列之:在flutter中使用相机拍摄照片
- CAD系列--CAD字体合集打包下载安装教程 CAD字体大合集共计3000
- Java IO系列(三):DataInputStream,DataOutputStream和RandomAccessFile详解编程语言
- 路透社全球CEO科技对话:荣耀和高通强强联手打造最强旗舰Magic3系列
- html5开发移动混合App系列1-开发环境搭建
- eval(function(p,a,c,k,e,d)系列解密javascript程序