vs编译器 mfc项目中使用hge画图浅谈

来源:互联网 发布:网络个人信息泄露案例 编辑:程序博客网 时间:2024/06/07 02:50

第一步:配置环境, 把下载好的hge文件中的.h .lib文件在工程属性中配置好,接下来就可以使用hge相关类别了。

第二步:在view类中创建OnCreate中配置hge。

<pre name="code" class="html">HGE *g_pHGE=NULL; //全局g_pHGE = hgeCreate(HGE_VERSION);g_pHGE->System_SetState(HGE_HWND, this->m_hWnd);g_pHGE->System_SetState(HGE_SCREENWIDTH,  500);g_pHGE->System_SetState(HGE_SCREENHEIGHT,  400);//这里的两个回调自己没用到 , 随便写一个就好了g_pHGE->System_SetState(HGE_FRAMEFUNC, CClientView::_FrameFunc);g_pHGE->System_SetState(HGE_RENDERFUNC, CClientView::_RenderFunc);g_pHGE->System_SetState(HGE_TITLE, "HGE");g_pHGE->System_SetState(HGE_WINDOWED, true);//g_pHGE->System_SetState(HGE_SCREENBPP, 32);//g_pHGE->System_SetState(HGE_ZBUFFER,true);g_pHGE->System_SetState(HGE_HIDEMOUSE, false);g_pHGE->System_SetState(HGE_SHOWSPLASH,false);//去除LOGOg_pHGE->System_SetState(HGE_FPS, 24);//g_pHGE->System_SetState(HGE_TEXTUREFILTER, true );//g_pHGE->System_SetState(HGE_DONTSUSPEND, true );//if(!g_pHGE->System_GetState(HGE_LOGFILE))//{// g_pHGE->System_SetState(HGE_LOGFILE, "hge.log");   //logo//}if(g_pHGE->System_Initiate()){//加载图片资源主要是背景, 这样在加载其他资源时还可以显示出背景,相当于加载logoLoadingTexture();//用多进程来显示图片//HgeLoadingThread  加载所要使用资源UpdateThread  设置刷新界面相关m_hLoadingThread=CreateThread(NULL,0,HgeLoadingThread,this,0,0);m_hUpdateThread=CreateThread(NULL,0,UpdateThread,this,0,0);//g_pHGE->System_Start();}//设置画布大小,这一步必须有,要不然图片变的很小显示出来在一小块区域内。g_pHGE->Gfx_SetDrawRect(dstRect,dstRect); DWORD WINAPI CGameClientView::UpdateThread(LPVOID lpvoid){DWORD dwLastTime;DWORD dwSleepTime=50;//1秒20帧DWORD dwUpdateTime;while(true){dwLastTime = GetTickCount();SetTimer(TIMER_HGE_RENDER,1,NULL);  //调用绘图函数dwUpdateTime = (GetTickCount()-dwLastTime);if(dwUpdateTime<dwSleepTime){Sleep(dwSleepTime-dwUpdateTime);}}return 0;}void CClientView::OnTimer(UINT nIDEvent){if (nIDEvent==TIMER_HGE_RENDER){KillTimer(TIMER_HGE_RENDER);RenderFunc();return;}}bool CClientView::RenderFunc(bool bFrame){if(!IsValidHGE()) return false;g_pHGE->Gfx_BeginScene();g_pHGE->Gfx_Clear(0);Render();g_pHGE->Gfx_EndScene();return true;}bool CClientView::Render(){//做爱做的事}关于绘图类://可以用所有图片形成图片集,这样使用比较方便class CHgeImage {private:HGE* m_pHGE;HTEXTURE m_pTexture[100];hgeSprite** m_sprImage[100];public:CHgeImage(void);~CHgeImage(void);//绘图/************************************************************************wImageIndex:图片索引*INT x,INT y,INT cx=0,INT cy=0,INT cw=0,INT ch=0:画布位置,图片在所要截取位置大小*fCurrentAngle:旋转角度************************************************************************/bool DrawImage(WORD wImageIndex,INT x,INT y,INT cx=0,INT cy=0,INT cw=0,INT ch=0,float fCurrentAngle=0.0f,float hFormat=0.5f,float vFormat=0.5f,float hscale=1.0f , float vscale=1.0f){m_sprImage[wImageIndex][0]->SetTextureRect(cx,cy,cw,ch);m_sprImage[wImageIndex][0]->SetHotSpot(0,0);m_sprImage[wImageIndex][0]->RenderEx((float)x,(float)y,fCurrentAngle,hscale,vscale);}//加载图片void LoadImageInfo(HTEXTURE pTexture,WORD wImageIndex,int nCountW=1,int nCountH=1,int nCountAll=1,bool bLToR=true){//验证合法if(!m_pHGE)return;if(wImageIndex>=MAX_HGE_TEXTURE_COUNT) return;if(nCountW<=0 || nCountH <=0 || nCountAll<=0) return;int width = m_pHGE->Texture_GetWidth(pTexture,true);int height = m_pHGE->Texture_GetHeight(pTexture,true);float w = (float)width/nCountW;float h= (float)height/nCountH;m_pTexture[wImageIndex] = pTexture;m_sprImage[wImageIndex] = new hgeSprite*[nCountAll];for (int i=0; i<nCountAll; i++){if(bLToR)m_sprImage[wImageIndex][i] = new hgeSprite(pTexture,(float)w*(i%nCountW),(float)h*(i/nCountW),(float)w,(float)h);elsem_sprImage[wImageIndex][i] = new hgeSprite(pTexture,(float)w*(i/nCountH),(float)h*(i%nCountH),(float)w,(float)h);m_sprImage[wImageIndex][i]->SetZ(m_fZ);m_sprImage[wImageIndex][i]->SetHotSpot((float)w/2,(float)h/2); }}}//另外一个很实用的解压缩的函数,解决图片资源过大问题//打开打包文件g_pHGE->Resource_AttachPack(。。。。); //关闭打包文件g_pHGE->Resource_RemoveAllPacks();


0 0
原创粉丝点击