📄 游戏程式设计指南(hoho篇) lesson5.htm
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- saved from url=(0045)http://www.gameres.com/HoHo/Guide/Lesson5.htm -->
<HTML><HEAD><TITLE>游戏程式设计指南(HoHo篇) Lesson5 - GameRes.com</TITLE>
<META content=zh-cn http-equiv=Content-Language>
<META content="MSHTML 5.00.3700.6699" name=GENERATOR>
<META content=FrontPage.Editor.Document name=ProgId>
<META content="text/html; charset=gb2312" http-equiv=Content-Type></HEAD>
<BODY aLink=#ff9900 bgColor=#000000 leftMargin=0 link=#ff9900 text=#ffffff
topMargin=0 vLink=#ff9900><FONT face=Arial>
<TABLE border=0 borderColor=#111111 cellPadding=0 cellSpacing=0 id=AutoNumber1
style="BORDER-COLLAPSE: collapse" width="100%">
<TBODY>
<TR>
<TD width="100%"><A href="http://www.gameres.com/"
title="中国游戏开发技术资源网 - GameRes.com"><IMG border=0 height=47
src="游戏程式设计指南(HoHo篇) Lesson5.files/titlesmall.jpg" width=200></A></TD></TR>
<TR>
<TD width="100%"> </TD></TR>
<TR>
<TD width="100%">
<DIV align=center>
<CENTER>
<TABLE border=0 cellPadding=0 cellSpacing=0 id=AutoNumber2
style="BORDER-COLLAPSE: collapse" width="85%">
<TBODY>
<TR>
<TD bgColor=#151631 width="100%">
<P align=right><FONT size=1>林德辉(Sea_Bug)
</FONT></P></TD></TR>
<TR>
<TD width="100%">
<P align=center><FONT size=1> </FONT><BR><FONT
color=#ffffee><B>游戏程式设计指南(HoHo篇)<BR>Lesson 5 —
字体绘制篇</B></FONT></P></TD></TR>
<TR>
<TD width="100%"> </TD></TR>
<TR>
<TD width="100%"><FONT size=4><B>序</B></FONT><FONT
size=2><BR><BR> 图像作为游戏的主要输出途径,其中不可或缺的就是文字,不管是作为游戏中使用,或者作为我们程式的调试手段,文字的输出表示是相当重要的,本节就是要给大家介绍如何在HoHo游戏程序中绘制文字;HoHo为大家提供了两种绘制方式,一种是通过Windows的GDI来进行文字绘制,另外一种则是通过HoHo自己的处理方式来进行文字绘制,当然,HoHo自处理的方式在性能方面比GDI的处理方式高出许多,同时,HoHo也提供了一个字体生成器,可以很方面的制作我们有戏当中所需要的字体格式。<BR><BR> 注:HoHo的自处理字体目前只支持等宽高的字体。<BR><BR><BR></FONT><B>目录:</B><FONT
size=2><BR></FONT> <A
href="http://www.gameres.com/HoHo/Guide/Lesson5.htm#使用GDI绘制文字"
target=_self>使用GDI绘制文字</A><BR> <A
href="http://www.gameres.com/HoHo/Guide/Lesson5.htm#使用HoHo自处理文字"
target=_self>使用HoHo自处理文字</A><FONT face=Arial><BR> <A
href="http://www.gameres.com/HoHo/Guide/Lesson5.htm#HoHo字体生成器使用"
target=_self>HoHo字体生成器使用</A><FONT face=Arial
size=2><BR><BR><BR><BR></FONT><B><A
name=使用GDI绘制文字>使用GDI绘制文字</A></B><FONT face=Arial
size=2><BR><BR> 首先,我们来看看如何使用Windows的GDI来进行文字绘制,大家都知道,Windows为我们提供了强大的文字绘制功能,很幸运的是,DirectDraw继承了这些,在DirectDraw的表面(Surfce)可以看作一个可供系统GDI绘制的缓存,当然,这里我们不会深入说明如何处理,HoHo已经把这些东西封装好了,好了,让我们来看看如何使用。<BR><BR> 第一步初始化,不用多说,声明操作句柄,代码片断如下:<BR><BR></FONT></FONT></FONT><FONT
color=#99ccff face=宋体 size=2> HFONT g_hFont = NULL;</FONT><FONT
face=Arial><FONT face=Arial size=2><BR> </FONT><FONT face=Arial>
<DIV align=center>
<CENTER>
<TABLE border=1 borderColor=#002846 cellPadding=0 cellSpacing=0
id=AutoNumber8 style="BORDER-COLLAPSE: collapse" width="80%">
<TBODY>
<TR>
<TD align=middle bgColor=#001824 width="100%"><FONT
size=2>声明GDI字体句柄</FONT></TD></TR>
<TR>
<TD align=middle width="100%"><FONT size=1> <BR><IMG
border=0 height=354
src="游戏程式设计指南(HoHo篇) Lesson5.files/Lesson5_2.gif"
width=365><BR> </FONT></TD></TR></TBODY></TABLE></CENTER></DIV></FONT>
<P><FONT size=2>声明完之后,</FONT><FONT face=Arial
size=2>我们必须对它进行初始化操作,我们通过调用系统API函数来进行Windows字体句柄创建,代码片断如下:<BR><BR></FONT></FONT><FONT
color=#99ccff face=宋体 size=2> g_hFont = CreateFont(12, 0, 0, 0,
FW_NORMAL, FALSE, FALSE, FALSE, GB2312_CHARSET, OUT_DEFAULT_PRECIS,
CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH,
"宋体");</FONT></P><FONT face=Arial>
<DIV align=center>
<CENTER>
<TABLE border=1 borderColor=#002846 cellPadding=0 cellSpacing=0
id=AutoNumber9 style="BORDER-COLLAPSE: collapse" width="80%">
<TBODY>
<TR>
<TD align=middle bgColor=#001824 width="100%"><FONT
size=2>初始化GDI字体</FONT></TD></TR>
<TR>
<TD align=middle width="100%"><FONT size=1> <BR><IMG
border=0 height=229
src="游戏程式设计指南(HoHo篇) Lesson5.files/Lesson5_4.gif"
width=496><BR> </FONT></TD></TR></TBODY></TABLE></CENTER></DIV>
<P><FONT face=Arial
size=2>我们可以看到,这里我们创建了一个12点阵的字体大小,当然,这些复杂的参数在MSDN可以查询到,这部分数据Windows的操作部分,我们不对此进行深入说明,有兴趣的朋友请参看MSDN。<BR><BR> 创建好GDI字体后,我们可以通过调用HoHo的图形函数DrawText()来进行字体绘制,代码示例如下:<BR><BR></FONT></FONT><FONT
color=#99ccff face=宋体 size=2> GetGraphics()->DrawText(
SCREENBUFFER, 30, 30, g_hFont, "GDI字体 Test 测试", RGB2Hi(255,255,255)
);</FONT></P><FONT face=Arial>
<DIV align=center>
<CENTER>
<TABLE border=1 borderColor=#002846 cellPadding=0 cellSpacing=0
id=AutoNumber10 style="BORDER-COLLAPSE: collapse" width="80%">
<TBODY>
<TR>
<TD align=middle bgColor=#001824 width="100%"><FONT
size=2>绘制GDI字体</FONT></TD></TR>
<TR>
<TD align=middle width="100%"><FONT size=1> <BR><IMG
border=0 height=204
src="游戏程式设计指南(HoHo篇) Lesson5.files/Lesson5_6.gif"
width=657><BR> </FONT></TD></TR></TBODY></TABLE></CENTER></DIV>
<P><FONT face=Arial
size=2>这样就能完成GDI字体的绘制工作,很easy吧!:)<BR><BR> 补充说一下,由于GDI字体绘制的机制与HoHo有所差别,故此函数在实际应用中操作比较消耗速度性能。<BR><BR><BR><BR></FONT><B><A
name=使用HoHo自处理文字>使用HoHo自处理文字</A></B><FONT
size=2><BR><BR> 接下来让我们看看HoHo自处理字体的使用,为什么要使用HoHo的自处理字体?因为它能够给你带来绘制效率,同时可以给你带来字体的附加效果,如:字体的边缘Alpha混合等。<BR><BR> HoHo字体的初始化和GDI字体一样,我们首先声明操作句柄,代码片段如下:<BR><BR></FONT></FONT><FONT
color=#99ccff face=宋体 size=2> LP_FONT g_pHoHoFont =
NULL;</FONT><FONT face=宋体></P></FONT><FONT face=Arial>
<DIV align=center>
<CENTER>
<TABLE border=1 borderColor=#002846 cellPadding=0 cellSpacing=0
id=AutoNumber11 style="BORDER-COLLAPSE: collapse" width="80%">
<TBODY>
<TR>
<TD align=middle bgColor=#001824 width="100%"><FONT
size=2>HoHo字体声明</FONT></TD></TR>
<TR>
<TD align=middle width="100%"><FONT size=1> <BR><IMG
border=0 height=354
src="游戏程式设计指南(HoHo篇) Lesson5.files/Lesson5_3.gif"
width=365><BR> </FONT></TD></TR></TBODY></TABLE></CENTER></DIV>
<P><FONT
size=2>声明完后,我们一样进行字体设备的创建,不过不同于GDI的是,HoHo字体是从自己的字体库文件中提取出来,而并非来源于Windows系统,这样就能有效的避免不同Windows导致的字体错乱情况,这个情况在繁体版本和简体版本的Windows中尤为明显。让我们看看创建HoHo字体的代码片段:<BR><BR></FONT></FONT><FONT
color=#99ccff face=宋体 size=2> g_pHoHoFont = msCreateFont(
"Font12.dat" );</FONT><FONT face=宋体></P></FONT><FONT face=Arial>
<DIV align=center>
<CENTER>
<TABLE border=1 borderColor=#002846 cellPadding=0 cellSpacing=0
id=AutoNumber12 style="BORDER-COLLAPSE: collapse" width="80%">
<TBODY>
<TR>
<TD align=middle bgColor=#001824 width="100%"><FONT
size=2>HoHo字体的创建</FONT></TD></TR>
<TR>
<TD align=middle width="100%"><FONT size=1> <BR><IMG
border=0 height=229
src="游戏程式设计指南(HoHo篇) Lesson5.files/Lesson5_5.gif"
width=496><BR> </FONT></TD></TR></TBODY></TABLE></CENTER></DIV>
<P><FONT
size=2>就这么简单的一句就能将字体从字库文件中创建出来,接下来我们看看如何绘制,代码片段如下:<BR><BR></FONT></FONT><FONT
color=#99ccff face=宋体 size=2> GetGraphics()->DrawFont(
SCREENBUFFER, 30, 60, g_pHoHoFont, RGB2Hi(255,255,255), "HOHO字体 Test
测试" );</FONT><FONT face=宋体></P></FONT><FONT face=Arial>
<DIV align=center>
<CENTER>
<TABLE border=1 borderColor=#002846 cellPadding=0 cellSpacing=0
id=AutoNumber13 style="BORDER-COLLAPSE: collapse" width="80%">
<TBODY>
<TR>
<TD align=middle bgColor=#001824 width="100%"><FONT
size=2>HoHo字体绘制</FONT></TD></TR>
<TR>
<TD align=middle width="100%"><FONT size=1> <BR><IMG
border=0 height=204
src="游戏程式设计指南(HoHo篇) Lesson5.files/Lesson5_7.gif"
width=657><BR> </FONT></TD></TR></TBODY></TABLE></CENTER></DIV>
<P><FONT
size=2>看看,是不是和GDI的字体绘制方式类似,问题就那么简单。<BR><BR> 我们看看我们程序的执行结果:<BR><BR> <IMG
border=0 height=275
src="游戏程式设计指南(HoHo篇) Lesson5.files/Lesson5_8.jpg"
width=319><BR><BR>看到HoHo字体还带着轮廓线了吗?这个就是HoHo自处理字体的功能,只要字库保存了轮廓线数据,我们的字体就能进行轮廓线绘制,当然还能进行轮廓Alpha处理,这里我简要的说明下一一些关于HoHo自处理字体的参数,看看字体的结构:<BR><BR></FONT></FONT><FONT
color=#99ccff face=宋体 size=2>struct HOHO_API
tagFont<BR>{<BR> int nStyle;</FONT><FONT
color=#99ccff face=宋体 size=2> </FONT><FONT
color=#99ccff face=宋体 size=2> </FONT><FONT
color=#99ccff face=宋体 size=2> </FONT><FONT
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -