|
#include<hgl/hgl.h>
#include<hgl/FlowObject.H>
#include<hgl/Font.H>
#include<hgl/opengl.h>
using namespace hgl;
Font *fnt;
class SecondObject:public FlowObject //第二个流程对象
{
void OnClick(int,int,unsigned __int32)
{
fos=fosReturn; //设定当前状态为返回上一次调用fosExitNotClear的类
}
public:
SecondObject()
{
OnMouseLeftDown=OnClick;
}
void Draw()
{
ClearScreen();
fnt->DrawString(0, 0,L"Second Flow Object!");
fnt->DrawString(0,32,L"Click Mouse return!");
}
};
class FirstObject:public FlowObject //第一个流程对象
{
void MouseProc(int,int,unsigned __int32)
{
fos=fosExitNotClear; //设定当前流程需要退出
NextObject=new SecondObject; //设定下一个流程对象
//之后对象控制器会自动清除当前对象,并将指定的对象做为新的当前对象
}
public:
FirstObject()
{
fnt=LoadFont(L"impact.ttf",32,32);
OnMouseLeftDown=MouseProc;
}
~FirstObject()
{
delete fnt;
}
void ObjectReturn(FlowObject *obj)
{
//这里的obj为之前new出来的NextObject,这个函数在NextObject被delete前调用,一般用来回传参数
fos=fosOK;
NextObject=NULL;
}
void Draw()
{
ClearScreen();
fnt->DrawString(0, 0,L"First Flow Object!");
fnt->DrawString(0,32,L"Click Mouse Left!");
}
};
void GameMain(char *)
{
SystemInitInfo sii;
sii.info.ProjectName =L"关闭当前流程,到下一流程对象"; //工程名称
sii.info.ProjectCode =L"NextFlow"; //工程代码(一般使用英文名称)
sii.graphics.Width =640; //游戏画面宽
sii.graphics.Height =480; //游戏画面高
sii.graphics.fs.Width =640; //全屏宽度/窗口宽度
sii.graphics.fs.Height =480; //全屏高度/窗口高度
if(Application->Init(&sii)==false) //初始化工程
return;
Application->flow.SetStart(new FirstObject); //设定起始流程
Application->Run(); //开始运行程序
}
|
|