基于HGE的简易游戏框架.docx

上传人:b****8 文档编号:10668404 上传时间:2023-02-22 格式:DOCX 页数:16 大小:16.73KB
下载 相关 举报
基于HGE的简易游戏框架.docx_第1页
第1页 / 共16页
基于HGE的简易游戏框架.docx_第2页
第2页 / 共16页
基于HGE的简易游戏框架.docx_第3页
第3页 / 共16页
基于HGE的简易游戏框架.docx_第4页
第4页 / 共16页
基于HGE的简易游戏框架.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

基于HGE的简易游戏框架.docx

《基于HGE的简易游戏框架.docx》由会员分享,可在线阅读,更多相关《基于HGE的简易游戏框架.docx(16页珍藏版)》请在冰豆网上搜索。

基于HGE的简易游戏框架.docx

基于HGE的简易游戏框架

基于HGE的简易游戏框架

//Application\Application.h

#pragmaonce

#pragmacomment(lib,"hge.lib")

#pragmacomment(lib,"hgehelp.lib")

#include

#include

classCApplication

{

  friendintWINAPIWinMain(HINSTANCE,HINSTANCE,LPSTR,int);

public:

  CApplication();

  virtual~CApplication();

  staticCApplication*GetApplication();

  staticHGE*GetHGE();

protected:

  virtualvoidInitApplication();

  virtualboolInitInstance();

  virtualvoidExitInstance();

  virtualboolFrameFunc();

  virtualvoidRenderFunc();

  virtualboolGFXRestoreFunc();

  virtualvoidFocusLostFunc();

  virtualvoidFocusGainFunc();

  virtualboolExitFunc();

private:

  voidExitApplication();

  boolInitialize();

  boolRun();

  staticboolFrameCallback();

  staticboolRenderCallback();

  staticboolGFXRestoreCallback();

  staticboolFocusLostCallback();

  staticboolFocusGainCallback();

  staticboolExitCallback();

private:

  staticintm_nAppCnt;

  staticCApplication*m_pThis;

  staticHGE*m_pHGE;

};

//Application\Application.cpp

#include"Application.h"

HGE*CApplication:

:

m_pHGE=NULL;

intCApplication:

:

m_nAppCnt=0;

CApplication*CApplication:

:

m_pThis=NULL;

CApplication:

:

CApplication()

{

  m_nAppCnt++;

  assert(m_nAppCnt==1);

  m_pThis=this;

}

CApplication:

:

~CApplication()

{

  m_nAppCnt--;

}

CApplication*CApplication:

:

GetApplication()

{

  assert(m_pThis!

=NULL);

  returnm_pThis;

}

HGE*CApplication:

:

GetHGE()

{

  assert(m_pHGE!

=NULL);

  returnm_pHGE;

}

voidCApplication:

:

InitApplication()

{

}

boolCApplication:

:

InitInstance()

{

  returntrue;

}

voidCApplication:

:

ExitInstance()

{

}

boolCApplication:

:

FrameFunc()

{

  returnfalse;

}

voidCApplication:

:

RenderFunc()

{

}

boolCApplication:

:

GFXRestoreFunc()

{

  returntrue;

}

voidCApplication:

:

FocusLostFunc()

{

}

voidCApplication:

:

FocusGainFunc()

{

}

boolCApplication:

:

ExitFunc()

{

  returntrue;

}

voidCApplication:

:

ExitApplication()

{

  m_pHGE->System_Shutdown();

  m_pHGE->Release();

}

boolCApplication:

:

Initialize()

{

  m_pHGE=hgeCreate(HGE_VERSION);

  assert(m_pHGE!

=NULL);

  m_pHGE->System_SetState(HGE_FRAMEFUNC,FrameCallback);

  m_pHGE->System_SetState(HGE_RENDERFUNC,RenderCallback);

  m_pHGE->System_SetState(HGE_GFXRESTOREFUNC,GFXRestoreCallback);

  m_pHGE->System_SetState(HGE_FOCUSLOSTFUNC,FocusLostCallback);

  m_pHGE->System_SetState(HGE_FOCUSGAINFUNC,FocusGainCallback);

  m_pHGE->System_SetState(HGE_EXITFUNC,ExitCallback);

  InitApplication();

  if(!

m_pHGE->System_Initiate())

  {

    MessageBox(NULL,m_pHGE->System_GetErrorMessage(),"Error",MB_OK|MB_ICONERROR);

    ExitApplication();

    returnfalse;

  }

  if(!

InitInstance())

  {

    ExitApplication();

    returnfalse;

  }

  returntrue;

}

boolCApplication:

:

Run()

{

  boolbRes=m_pHGE->System_Start();

  ExitInstance();

  ExitApplication();

  returnbRes;

}

boolCApplication:

:

FrameCallback()

{

  returnm_pThis->FrameFunc();

}

boolCApplication:

:

RenderCallback()

{

  m_pThis->RenderFunc();

  returnfalse;

}

boolCApplication:

:

GFXRestoreCallback()

{

  returnm_pThis->GFXRestoreFunc();

}

boolCApplication:

:

FocusLostCallback()

{

  m_pThis->FocusLostFunc();

  returnfalse;

}

boolCApplication:

:

FocusGainCallback()

{

  m_pThis->FocusGainFunc();

  returnfalse;

}

boolCApplication:

:

ExitCallback()

{

  returnm_pThis->ExitFunc();

}

//Application\Main.cpp

#include"Application.h"

intWINAPIWinMain(HINSTANCEhInstance,HINSTANCEhPrevInstance,LPSTRlpCmdLine,intnShowCmd)

{

  if(!

CApplication:

:

GetApplication()->Initialize())return-1;

  if(!

CApplication:

:

GetApplication()->Run())return-2;

  return0;

}

//MyApp\MyApp.h

#pragmaonce

#pragmacomment(lib,"..\\Application\\Debug\\Application.lib")

#include"..\\Application\\Application.h"

#include"hgeFont.h"

#include"hgeSprite.h"

#include"hgeParticle.h"

classCMyApp:

  publicCApplication

{

public:

  CMyApp();

  virtual~CMyApp();

  voidBoom(floatfDx,floatfDy)const;

protected:

  virtualvoidInitApplication();

  virtualboolInitInstance();

  virtualvoidExitInstance();

  virtualboolFrameFunc();

  virtualvoidRenderFunc();

  virtualboolGFXRestoreFunc();

  virtualboolExitFunc();

protected:

  hgeFont*m_pFont;

  HTEXTUREm_hTex;

  HEFFECTm_hEff;

  HTARGETm_hTarg;

  hgeSprite*m_pSprite,*m_pSprPar,*m_pSprTarg;

  hgeParticleSystem*m_pPar;

  floatm_fx,m_fy;

};

externCMyApptheApp;

//MyApp\MyApp.cpp

#include"MyApp.h"

#define_CRTDBG_MAP_ALLOC

#include

#include

#defineSPEED    90.0f

#defineFRICTION  0.98f

CMyApptheApp;

CMyApp:

:

CMyApp()

  :

m_pFont(NULL)

  ,m_hTex(NULL)

  ,m_hEff(NULL)

  ,m_hTarg(NULL)

  ,m_pSprite(NULL)

  ,m_pSprPar(NULL)

  ,m_pSprTarg(NULL)

  ,m_pPar(NULL)

  ,m_fx(100)

  ,m_fy(100)

{

}

CMyApp:

:

~CMyApp()

{

  _CrtDumpMemoryLeaks();

}

voidCMyApp:

:

Boom(floatfdx,floatfdy)const

{

  intnPan=(int)(m_fx-400)/4;

  floatfPitch=(fdx*fdx+fdy*fdy)*0.0005f+0.2f;

  GetHGE()->Effect_PlayEx(m_hEff,100,nPan,fPitch);

}

voidCMyApp:

:

InitApplication()

{

  GetHGE()->System_SetState(HGE_TITLE,"HGEApplication");

  GetHGE()->System_SetState(HGE_SHOWSPLASH,false);

  GetHGE()->System_SetState(HGE_WINDOWED,true);

  GetHGE()->System_SetState(HGE_HIDEMOUSE,false);

  GetHGE()->System_SetState(HGE_FPS,100);

}

boolCMyApp:

:

InitInstance()

{

  m_pFont=newhgeFont("Font1.fnt");

  m_hTex=GetHGE()->Texture_Load("particles.png");

  if(m_hTex==NULL)returnfalse;

  m_hEff=GetHGE()->Effect_Load("menu.wav");

  if(m_hEff==NULL)returnfalse;

  m_hTarg=GetHGE()->Target_Create(800,600,false);

  m_pSprite=newhgeSprite(m_hTex,96,64,32,32);

  m_pSprite->SetColor(ARGB(255,255,160,0));

  m_pSprite->SetHotSpot(16,16);

  m_pSprPar=newhgeSprite(m_hTex,96,64,32,32);

  m_pSprPar->SetBlendMode(BLEND_COLORMUL|BLEND_ALPHAADD|BLEND_NOZWRITE);

  m_pSprPar->SetHotSpot(16,16);

  m_pPar=newhgeParticleSystem("trail.psi",m_pSprPar);

  m_pPar->Fire();

  m_pSprTarg=newhgeSprite(GetHGE()->Target_GetTexture(m_hTarg),0,0,800,600);

  m_pSprTarg->SetBlendMode(BLEND_COLORMUL|BLEND_ALPHAADD|BLEND_NOZWRITE);

  returntrue;

}

voidCMyApp:

:

ExitInstance()

{

  deletem_pSprTarg;

  deletem_pPar;

  deletem_pSprPar;

  deletem_pSprite;

  GetHGE()->Target_Free(m_hTarg);

  GetHGE()->Effect_Free(m_hEff);

  GetHGE()->Texture_Free(m_hTex);

  deletem_pFont;

}

boolCMyApp:

:

FrameFunc()

{

  floatfdt=GetHGE()->Timer_GetDelta();

  staticfloatfdx=0.0f,fdy=0.0f;

  if(GetHGE()->Input_GetKeyState(HGEK_LEFT))fdx-=SPEED*fdt;

  if(GetHGE()->Input_GetKeyState(HGEK_RIGHT))fdx+=SPEED*fdt;

  if(GetHGE()->Input_GetKeyState(HGEK_UP))fdy-=SPEED*fdt;

  if(GetHGE()->Input_GetKeyState(HGEK_DOWN))fdy+=SPEED*fdt;

  fdx*=FRICTION;

  fdy*=FRICTION;

  m_fx+=fdx;

  m_fy+=fdy;

  if(m_fx<16)

  {

    m_fx=16+16-m_fx;

    fdx=-fdx;

    Boom(fdx,fdy);

  }

  if(m_fx>784)

  {

    m_fx=784+784-m_fx;

    fdx=-fdx;

    Boom(fdx,fdy);

  }

  if(m_fy<16)

  {

    m_fy=16+16-m_fy;

    fdy=-fdy;

    Boom(fdx,fdy);

  }

  if(m_fy>584)

  {

    m_fy=584+584-m_fy;

    fdy=-fdy;

    Boom(fdx,fdy);

  }

  m_pPar->info.nEmission=(int)(fdx*fdx+fdy*fdy)*2;

  m_pPar->MoveTo(m_fx,m_fy);

  m_pPar->Update(fdt);

  returnfalse;

}

voidCMyApp:

:

RenderFunc()

{

  GetHGE()->Gfx_BeginScene(m_hTarg);

  GetHGE()->Gfx_Clear(ARGB(255,0,0,0));

  m_pSprite->Render(m_fx,m_fy);

  m_pPar->Render();

  GetHGE()->Gfx_EndScene();

  GetHGE()->Gfx_BeginScene();

  GetHGE()->Gfx_Clear(ARGB(255,0,0,0));

  m_pFont->printf(5,5,HGETEXT_LEFT,"FPS:

%d",GetHGE()->Timer_GetFPS());

  for(inti=0;i<5;i++)

  {

    m_pSprTarg->Render(0.0f,i*50.0f-100);

    m_pSprTarg->Render(i*50.0f-100,0.0f);

  }

  GetHGE()->Gfx_EndScene();

}

boolCMyApp:

:

GFXRestoreFunc()

{

  if(m_pSprTarg!

=NULL&&m_hTarg!

=NULL)

  {

    m_pSprTarg->SetTexture(GetHGE()->Target_GetTexture(m_hTarg));

    returntrue;

  }

  returnfalse;

}

boolCMyApp:

:

ExitFunc()

{

  returnMessageBox(NULL,"是否退出程序?

","HGEApplication"

    ,MB_YESNO|MB_ICONWARNING)==IDYES;

}

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > PPT模板 > 卡通动漫

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1