?? 游戲程式設計指南(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 + -