DirectX游戏编程入门——第二部分(游戏编程工具箱) ——打印文本
来源:互联网 发布:何老师都哭了知乎 编辑:程序博客网 时间:2024/05/18 02:19
本系列文章由 net_assassin 整理编写,转载请注明出处。
http://blog.csdn.net/net_assassin/article/category/1100363
作者:net_assassin 邮箱: net_assassin@hotmail.com 期待着与志同道合的朋友们相互交流
本章我们将学习使用ID3DXFont创建字体并在屏幕上打印文本的方法。这个类使我们可能使用任何安装在Windows系统中的TrueType字体来打印文本。不过建议只使用标准字体。
创建字体
在过去我喜欢使用基于位图的字体,其字体集以ASCII顺序储存在一个位图文件中。在装载了这个位图之后,这种字体借用精灵的特性将字符串中的每个字符渲染出来。这样做的结果是我们会得到一种在现实效果上和我们所期望的完全一致的字体,因为我们在控制着原位图。
DirectX提供了一个字体类,它抽象了整个过程,从而使我们可以不必太关注其内部逻辑(例如满载字体的位图图像)而花更多的时间在游戏代码上。ID3DXFont接口用于创建字体,其指针版已经预定义好了:
LPD3DXFONT font;
创建字体对象
D3DXCreateFontIndirect(d3ddev,&desc,&font);
desc 是 D3DXFONT_DESC 结构,定义如下:
D3DXFONT_DESC desc = { size, //height 0, //width 0, //weight 0, //miplevels false, //italic DEFAULT_CHARSET, //charset OUT_TT_PRECIS, //output precision CLIP_DEFAULT_PRECIS, //quality DEFAULT_PITCH, //pitch and family "" //font name };
可重用的MakeFont函数
将所有这些代码放到一个可重用的函数中,然后添加到游戏库中。这个函数需要字体明晨及字体点尺寸作为参数,它返回一个指向LPD3DXFONT 对象的指针。
LPD3DXFONT MakeFont(string name, int size){ LPD3DXFONT font = NULL; D3DXFONT_DESC desc = { size, //height 0, //width 0, //weight 0, //miplevels false, //italic DEFAULT_CHARSET, //charset OUT_TT_PRECIS, //output precision CLIP_DEFAULT_PRECIS, //quality DEFAULT_PITCH, //pitch and family "" //font name }; strcpy(desc.FaceName, name.c_str()); D3DXCreateFontIndirect(d3ddev, &desc, &font); return font;}
使用ID3DXFont打印文本
void FontPrint(LPD3DXFONT font, int x, int y, string text, D3DCOLOR color){ //figure out the text boundary RECT rect = { x, y, 0, 0 }; font->DrawText( NULL, text.c_str(), text.length(), &rect, DT_CALCRECT, color); //print the text font->DrawText(spriteobj, text.c_str(), text.length(), &rect, DT_LEFT, color); }
测试字体输出
- DirectX游戏编程入门——第二部分(游戏编程工具箱) ——打印文本
- DirectX游戏编程入门——第二部分(游戏编程工具箱) —— 绘制位图
- DirectX游戏编程入门——第二部分(游戏编程工具箱) ——精灵变换
- DirectX游戏编程入门——第二部分(游戏编程工具箱) ——卷动背景
- DirectX游戏编程入门——第二部分(游戏编程工具箱) ——播放音频
- DirectX游戏编程入门——第二部分(游戏编程工具箱) —— Bomb Catcher 伪游戏
- DirectX游戏编程入门——第二部分(游戏编程工具箱) ——精灵编程之简介
- DirectX游戏编程入门——第二部分(游戏编程工具箱) ——精灵编程之透明的精灵
- DirectX游戏编程入门——第二部分(游戏编程工具箱) ——精灵编程之动画的精灵
- DirectX游戏编程入门——第二部分(游戏编程工具箱) ——精灵编程之碰撞检测
- DirectX游戏编程入门——第二部分(游戏编程工具箱) —— 键盘和鼠标输入
- DirectX游戏编程入门——第二部分(游戏编程工具箱) ——3D渲染基础
- DirectX游戏编程入门——第二部分(游戏编程工具箱) ——渲染3D模型文件
- DirectX游戏编程入门——第一部分(Windows和DirectX游戏编程引言) —— 初识DirectX
- DirectX游戏编程入门——第一部分(Windows和DirectX游戏编程引言) —— 初识DirectX
- DirectX游戏编程入门——第一部分(Windows和DirectX游戏编程引言) —— 游戏循环
- DirectX游戏编程入门——前言
- DirectX游戏编程入门——第一部分(Windows和DirectX游戏编程引言)——认识Windows
- No 143 · 六道面试硅谷工程师的变态题目
- Open vSwitch – 开放虚拟交换标准
- c++ 设计模式之 观察者模式
- Android屏幕适配
- Mininet – “懒惰”网络研究者的福音
- DirectX游戏编程入门——第二部分(游戏编程工具箱) ——打印文本
- android camera(4)
- 转: 多重继承和void*的糗事
- NOX – 现代网络操作系统
- OpenStack – 开源云计算项目
- apue中int sigsuspend(const sigset_t *sigmask)的深入理解
- win7下安装vs2010导致端口80被PID=4占用问题的解决
- 各种星号输出
- 这么多技术我该怎么学