Posted on 2010-04-22 18:56
劍孤寒 閱讀(1103)
評(píng)論(7) 編輯 收藏 引用 所屬分類:
Galaxy2D 游戲引擎教程
這一節(jié)我們來學(xué)習(xí)如何使用字體,首先我們要?jiǎng)?chuàng)建一個(gè)字體,在GGE中用
Font_Create (LPCSTR fontname, int size=16, bool bBold=false, bool bBorder=false)函數(shù)來創(chuàng)建一個(gè)字體。
fontname表示字體名字,可以使用任何已在操作系統(tǒng)中注冊(cè)過的字體,如果找不到指定的字體,將使用系統(tǒng)默認(rèn)字體。
size參數(shù)表示字體大小,單位為像素,默認(rèn)的字體大小為16x16像素。如果希望使用粗體字,可將
bBold參數(shù)設(shè)為true。
bBorder參數(shù)則用于設(shè)置是否給字體加上邊框,邊框的顏色也是可以設(shè)置的。
在OnInitiate()函數(shù)中添加創(chuàng)建字體代碼:
m_font = Font_Create("宋體", 18, false, true); 創(chuàng)建成功會(huì)返回一個(gè)ggeFont指針,順便設(shè)置一下字體邊框的顏色
m_font->SetBorderColor(0xFF0000FF);
ggeFont提供了兩個(gè)函數(shù)來將文字顯示在屏幕上,分別是gge::Render()和gge::Print(),后者有點(diǎn)像printf()函數(shù)可以格式化字符串。在顯示文字時(shí)可以設(shè)置文字的對(duì)齊樣式,ggeFont提供了三種對(duì)齊樣式:左對(duì)齊、右對(duì)齊、居中對(duì)齊,可以通過ggeFont::SetAlign()函數(shù)進(jìn)行設(shè)置。
//設(shè)置對(duì)齊樣式
Graph_RenderLine(128, 0, 128, 60);
m_font->SaveState(); //保存當(dāng)前狀態(tài)
m_font->SetColor(0xFFFFFFFF);
m_font->SetAlign(TEXT_LEFT);
m_font->Render(128, 0, "左對(duì)齊");
m_font->SetAlign(TEXT_CENTER);
m_font->Render(128, 20, "居中對(duì)齊");
m_font->SetAlign(TEXT_RIGHT);
m_font->Render(128, 40, "右對(duì)齊");
m_font->LoadState(); //恢復(fù)以前的狀態(tài)
前面代碼中的ggeFont::SaveState()和ggeFont::LoadState()用于保存和恢復(fù)字體狀態(tài),以免前面改變的字體狀態(tài)會(huì)影響后面的文字顯示,而且也不用每次改了狀態(tài)后都要人肉改回來了。
在一些游戲中可能需要讓文字逐字顯示出來,ggeFont提供了一個(gè)函數(shù)
ggeFont::SetCharNum()來做這件事情,另外在游戲中可能需要顯示一些關(guān)鍵字,ggeFont提供了一個(gè)顏色標(biāo)簽功能,使得可以在顯示文字時(shí)動(dòng)態(tài)改變后面的文字顏色。
//顯示一定數(shù)量的文字
int maxChar = m_font->GetStringInfo("字體測(cè)試");
if (Timer_GetTime() - m_charTime > 1)

{
if (m_charNum >= maxChar) m_charNum = 0;
else m_charNum++;

m_charTime = Timer_GetTime();
}
m_font->SaveState(); //保存當(dāng)前狀態(tài)
m_font->SetCharNum(m_charNum); //設(shè)置顯式的文字?jǐn)?shù)量
m_font->Render(0, 100, "<cff0000>字<cffff00>體<cff00ff>測(cè)<c00ffff>試"); //顯示文字
m_font->LoadState(); //恢復(fù)以前的狀態(tài)
m_font->Print(0, 120, "正在顯示第%d個(gè)字。", m_charNum);
這段代碼先通過ggeFont::GetStringInfo()函數(shù)拿到字符串文字?jǐn)?shù)量(也可以拿到字符串其它一些信息,詳細(xì)說明請(qǐng)查看引擎文檔),然后用ggeFont::SetCharNum()設(shè)置每次要顯示的文字?jǐn)?shù)量,在顯示文字時(shí)通過在文字前加上類似<cff0000>的顏色標(biāo)簽來動(dòng)態(tài)改變字符串中的文字顏色。
有時(shí)候在顯示一段文字時(shí)可能想要文字根據(jù)某個(gè)寬度自動(dòng)換行,ggeFont提供了一個(gè)
ggeFont::SetLingWidth()來做這件事情。
//設(shè)置行間距、字間距以及換行
m_font->SaveState();
m_font->SetLineSpace(4);
m_font->SetCharSpace(2);
m_font->SetLineWidth(140);
m_font->Render(0, 180, "這段文字的行間距為4,字間距為2,每行如果超過140個(gè)像素則自動(dòng)換行。");
m_font->LoadState(); 以上介紹了ggeFont的一些常用功能,還有一些例如裁剪、陰影等功能就不一一舉例了,文檔里都有詳細(xì)說明。
