|
HGP是用于一般2D图片的显示,源图必须是PSD格式。支持PSD格式的多层与整体透明度、ALPHA等、无2次幂限制、但不能当做贴图使用。这个新的示例可以通过数字键1-8来选择显示指定层。
如果显卡不支持非2次幂贴图,程序会自动拆分成多个贴图来实现。
如果显卡支持非2次幂尺寸贴图,程序便不会拆分图片。
打开HGPTest工程、MainUnit.CPP文件,复制以下内容即可。
注:1.需要把windows/fons/下的impact.ttf复制到hgptest.exe、5.hgp所在目录
2.由于PSD解码器是按照Adobe Photoshop 6 开发文档编写的,所以对Photoshop 7/8的支持可能有问题。
----------------------------------------------------------------------------------------------------
#include<hgl/hgl.h>
#include<hgl/hgp.h>
#include<hgl/OpenGL.H>
#include<hgl/Font.H>
using namespace hgl;
class Test:public FlowObject
{
HGP *hgp; //定义一个HGP图片处理类
Font *fnt; //定义一个字符处理程序
wchar_t str[32];
wchar_t name[32];
private:
void OnCharProc(wchar_t ch)
{
if(ch>='1'&&ch<='8')
{
hgp->SetShow(false); //设置所有层都不显示
hgp->Layer[ch-'1'].Visible=true; //设置指定层显示
wcscpy(str,L"Only show ? layer");
str[10]=ch-1;
wcscpy(name,L"Layer Name: ");
wcscat(name,hgp->Layer[ch-'1'].Name.wc_str());
}
}
public:
Test()
{
fnt=LoadFont("impact.ttf",32,32); //加载一个字库,并将渲染大小设为32x32
hgp=new HGP(L"5.hgp"); //创建HGP图片处理程序,并定义文件名
To2DMode(640,480); //设置显示模式为2D,并将画面解析度设为640x480
OnChar=OnCharProc; //设置字符输入的处理程序为OnCharProc
wcscpy(str,L"lease press 1 - 8");
wcscpy(name,L"<All Layer>");
}
~Test()
{
delete hgp; //删除HGP图片处理程序
delete fnt; //删除字体处理程序
}
void Update() //本对象刷新处理程序
{
ClearScreen(); //清屏
hgp->Draw((640-hgp->Width)/2,(480-hgp->Height)/2); //显示图片
fnt->DrawString(0,0,str); //显示提示信息
fnt->DrawString(0,32,name); //显示层次名称
}
};
void GameMain(char *)
{
Application->GameName =L"HGP测试";
Application->GameCode =L"HGPTest";
Application->ProjectFile=L"HGPTest.cmproj";
if(!Application->Init())return; //初始化应用程序
Application->flow.SetStart(new Test); //设置起始流程
Application->Run(); //开始运行
} |
|