基于HGE的简易游戏框架.doc_第1页
基于HGE的简易游戏框架.doc_第2页
基于HGE的简易游戏框架.doc_第3页
基于HGE的简易游戏框架.doc_第4页
基于HGE的简易游戏框架.doc_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

基于HGE的简易游戏框架/ ApplicationApplication.h #pragma once#pragma comment(lib, hge.lib)#pragma comment(lib, hgehelp.lib)#include #include class CApplication friend int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int); public: CApplication(); virtual CApplication(); static CApplication* GetApplication(); static HGE* GetHGE(); protected: virtual void InitApplication(); virtual bool InitInstance(); virtual void ExitInstance(); virtual bool FrameFunc(); virtual void RenderFunc(); virtual bool GFXRestoreFunc(); virtual void FocusLostFunc(); virtual void FocusGainFunc(); virtual bool ExitFunc(); private: void ExitApplication(); bool Initialize(); bool Run(); static bool FrameCallback(); static bool RenderCallback(); static bool GFXRestoreCallback(); static bool FocusLostCallback(); static bool FocusGainCallback(); static bool ExitCallback(); private: static int m_nAppCnt; static CApplication *m_pThis; static HGE *m_pHGE; / ApplicationApplication.cpp #include Application.h HGE *CApplication:m_pHGE=NULL;int CApplication: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); return m_pThis; HGE* CApplication:GetHGE() assert(m_pHGE!=NULL); return m_pHGE; void CApplication:InitApplication() bool CApplication:InitInstance() return true; void CApplication:ExitInstance() bool CApplication:FrameFunc() return false; void CApplication:RenderFunc() bool CApplication:GFXRestoreFunc() return true; void CApplication:FocusLostFunc() void CApplication:FocusGainFunc() bool CApplication:ExitFunc() return true; void CApplication:ExitApplication() m_pHGE-System_Shutdown(); m_pHGE-Release(); bool CApplication: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(); return false; if (!InitInstance() ExitApplication(); return false; return true; bool CApplication:Run() bool bRes=m_pHGE-System_Start(); ExitInstance(); ExitApplication(); return bRes; bool CApplication:FrameCallback() return m_pThis-FrameFunc(); bool CApplication:RenderCallback() m_pThis-RenderFunc(); return false; bool CApplication:GFXRestoreCallback() return m_pThis-GFXRestoreFunc(); bool CApplication:FocusLostCallback() m_pThis-FocusLostFunc(); return false; bool CApplication:FocusGainCallback() m_pThis-FocusGainFunc(); return false; bool CApplication:ExitCallback() return m_pThis-ExitFunc(); / ApplicationMain.cpp #include Application.h int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd) if (!CApplication:GetApplication()-Initialize() return -1; if (!CApplication:GetApplication()-Run() return -2; return 0;/ MyAppMyApp.h #pragma once#pragma comment(lib, .ApplicationDebugApplication.lib)#include .ApplicationApplication.h#include hgeFont.h#include hgeSprite.h#include hgeParticle.h class CMyApp : public CApplicationpublic: CMyApp(); virtual CMyApp(); void Boom(float fDx, float fDy) const; protected: virtual void InitApplication(); virtual bool InitInstance(); virtual void ExitInstance(); virtual bool FrameFunc(); virtual void RenderFunc(); virtual bool GFXRestoreFunc(); virtual bool ExitFunc(); protected: hgeFont *m_pFont; HTEXTURE m_hTex; HEFFECT m_hEff; HTARGET m_hTarg; hgeSprite *m_pSprite, *m_pSprPar, *m_pSprTarg; hgeParticleSystem *m_pPar; float m_fx, m_fy; extern CMyApp theApp; / MyAppMyApp.cpp #include MyApp.h #define _CRTDBG_MAP_ALLOC#include #include #define SPEED 90.0f#define FRICTION 0.98f CMyApp theApp; 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(); void CMyApp:Boom(float fdx, float fdy) const int nPan=(int)(m_fx-400)/4; float fPitch=(fdx*fdx+fdy*fdy)*0.0005f+0.2f; GetHGE()-Effect_PlayEx(m_hEff, 100, nPan, fPitch); void CMyApp:InitApplication() GetHGE()-System_SetState(HGE_TITLE, HGE Application); GetHGE()-System_SetState(HGE_SHOWSPLASH, false); GetHGE()-System_SetState(HGE_WINDOWED, true); GetHGE()-System_SetState(HGE_HIDEMOUSE, false); GetHGE()-System_SetState(HGE_FPS, 100); bool CMyApp:InitInstance() m_pFont=new hgeFont(Font1.fnt); m_hTex=GetHGE()-Texture_Load(particles.png); if (m_hTex=NULL) return false; m_hEff=GetHGE()-Effect_Load(menu.wav); if (m_hEff=NULL) return false; m_hTarg=GetHGE()-Target_Create(800, 600, false); m_pSprite=new hgeSprite(m_hTex, 96, 64, 32, 32); m_pSprite-SetColor(ARGB(255, 255, 160, 0); m_pSprite-SetHotSpot(16, 16); m_pSprPar=new hgeSprite(m_hTex, 96, 64, 32, 32); m_pSprPar-SetBlendMode(BLEND_COLORMUL | BLEND_ALPHAADD | BLEND_NOZWRITE); m_pSprPar-SetHotSpot(16, 16); m_pPar=new hgeParticleSystem(trail.psi, m_pSprPar); m_pPar-Fire(); m_pSprTarg=new hgeSprite(GetHGE()-Target_GetTexture(m_hTarg), 0, 0, 800, 600); m_pSprTarg-SetBlendMode(BLEND_COLORMUL | BLEND_ALPHAADD | BLEND_NOZWRITE); return true; void CMyApp:ExitInstance() delete m_pSprTarg; delete m_pPar; delete m_pSprPar; delete m_pSprite; GetHGE()-Target_Free(m_hTarg); GetHGE()-Effect_Free(m_hEff); GetHGE()-Texture_Free(m_hTex); delete m_pFont; bool CMyApp:FrameFunc() float fdt=GetHGE()-Timer_GetDelta(); static float fdx=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_fx784) m_fx=784+784-m_fx; fdx=-fdx; Boom(fdx, fdy); if (m_fy584) 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

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论