Posted on 2010-04-22 18:56
剑孤寒 阅读(1011)
评论(7) 编辑 收藏 引用 所属分类:
Galaxy2D 游戏引擎教程
这一节我们来学习如何使用字体,首先我们要创建一个字体,在GGE中用
Font_Create (LPCSTR fontname, int size=16, bool bBold=false, bool bBorder=false)函数来创建一个字体。
fontname表示字体名字,可以使用任何已在操作系统中注册过的字体,如果找不到指定的字体,将使用系统默认字体。
size参数表示字体大小,单位为像素,默认的字体大小为16x16像素。如果希望使用粗体字,可将
bBold参数设为true。
bBorder参数则用于设置是否给字体加上边框,边框的颜色也是可以设置的。
在OnInitiate()函数中添加创建字体代码:
m_font = Font_Create("宋体", 18, false, true); 创建成功会返回一个ggeFont指针,顺便设置一下字体边框的颜色
m_font->SetBorderColor(0xFF0000FF);
ggeFont提供了两个函数来将文字显示在屏幕上,分别是gge::Render()和gge::Print(),后者有点像printf()函数可以格式化字符串。在显示文字时可以设置文字的对齐样式,ggeFont提供了三种对齐样式:左对齐、右对齐、居中对齐,可以通过ggeFont::SetAlign()函数进行设置。
//设置对齐样式
Graph_RenderLine(128, 0, 128, 60);
m_font->SaveState(); //保存当前状态
m_font->SetColor(0xFFFFFFFF);
m_font->SetAlign(TEXT_LEFT);
m_font->Render(128, 0, "左对齐");
m_font->SetAlign(TEXT_CENTER);
m_font->Render(128, 20, "居中对齐");
m_font->SetAlign(TEXT_RIGHT);
m_font->Render(128, 40, "右对齐");
m_font->LoadState(); //恢复以前的状态
前面代码中的ggeFont::SaveState()和ggeFont::LoadState()用于保存和恢复字体状态,以免前面改变的字体状态会影响后面的文字显示,而且也不用每次改了状态后都要人肉改回来了。
在一些游戏中可能需要让文字逐字显示出来,ggeFont提供了一个函数
ggeFont::SetCharNum()来做这件事情,另外在游戏中可能需要显示一些关键字,ggeFont提供了一个颜色标签功能,使得可以在显示文字时动态改变后面的文字颜色。
//显示一定数量的文字
int maxChar = m_font->GetStringInfo("字体测试");
if (Timer_GetTime() - m_charTime > 1)
{
if (m_charNum >= maxChar) m_charNum = 0;
else m_charNum++;
m_charTime = Timer_GetTime();
}
m_font->SaveState(); //保存当前状态
m_font->SetCharNum(m_charNum); //设置显式的文字数量
m_font->Render(0, 100, "<cff0000>字<cffff00>体<cff00ff>测<c00ffff>试"); //显示文字
m_font->LoadState(); //恢复以前的状态
m_font->Print(0, 120, "正在显示第%d个字。", m_charNum);
这段代码先通过ggeFont::GetStringInfo()函数拿到字符串文字数量(也可以拿到字符串其它一些信息,详细说明请查看引擎文档),然后用ggeFont::SetCharNum()设置每次要显示的文字数量,在显示文字时通过在文字前加上类似<cff0000>的颜色标签来动态改变字符串中的文字颜色。
有时候在显示一段文字时可能想要文字根据某个宽度自动换行,ggeFont提供了一个
ggeFont::SetLingWidth()来做这件事情。
//设置行间距、字间距以及换行
m_font->SaveState();
m_font->SetLineSpace(4);
m_font->SetCharSpace(2);
m_font->SetLineWidth(140);
m_font->Render(0, 180, "这段文字的行间距为4,字间距为2,每行如果超过140个像素则自动换行。");
m_font->LoadState(); 以上介绍了ggeFont的一些常用功能,还有一些例如裁剪、阴影等功能就不一一举例了,文档里都有详细说明。