www.pudn.com > Game_11.rar > GameApp.h
// GameApp.h: interface for the GameApp class. // ////////////////////////////////////////////////////////////////////// #if !defined(AFX_GAMEAPP_H__831ECC45_F71E_440D_BA26_63D95BBDD88E__INCLUDED_) #define AFX_GAMEAPP_H__831ECC45_F71E_440D_BA26_63D95BBDD88E__INCLUDED_ #pragma comment (lib,"d3dx9.lib") #pragma comment (lib,"d3d9.lib") #pragma comment (lib,"dinput8.lib") #pragma comment (lib,"winmm.lib") #pragma comment (lib,"dxguid.lib") #include#include #include #include #include #include "SkinMesh.h" #include "Camera.h" #include "Terrain.h" #include #include "cube.h" #include "unit.h" #include "Sound.h" using namespace std; #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 #define D3DFVF_SCREENOBJECT D3DFVF_XYZ|D3DFVF_TEX1 //坐标信息 #define SAFE_RELEASE(p) if(p) {p->Release();p=NULL;} class CScreenObject { private: struct D3DVERTEX { float x,y,z; //坐标信息 float tu,tv; }; protected: float mWidth,mHeight; float x,y; LPDIRECT3DDEVICE9 m_pDevice; LPDIRECT3DTEXTURE9 m_pTexture; //材质 LPDIRECT3DVERTEXBUFFER9 m_pVB; public: CScreenObject(LPDIRECT3DDEVICE9 pDevice, char *strTexture,float width=0,float height=0) { D3DSURFACE_DESC surfDes; x=0; y=0; m_pDevice=pDevice; D3DXCreateTextureFromFile(m_pDevice,strTexture, &m_pTexture); m_pTexture->GetLevelDesc(0,&surfDes); if(width==0) mWidth =surfDes.Width ; else mWidth=width; if(height==0) mHeight =surfDes.Height ; else mHeight=height; m_pDevice->CreateVertexBuffer(4*sizeof(D3DVERTEX), D3DUSAGE_SOFTWAREPROCESSING,D3DFVF_SCREENOBJECT, D3DPOOL_DEFAULT, &m_pVB,NULL); D3DVERTEX VB[]= { 0, 0, 1.0f, 0.0f,0.0f, mWidth, 0, 1.0f, 1.0f,0.0f, 0, -mHeight, 1.0f, 0.0f,1.0f, mWidth, -mHeight, 1.0f, 1.0f,1.0f }; D3DVERTEX *pVertices; m_pVB->Lock(0,sizeof(VB),(void**)&pVertices,D3DLOCK_DISCARD); memcpy(pVertices,VB,sizeof(VB)); m_pVB->Unlock(); }; ~CScreenObject() { SAFE_RELEASE(m_pVB); SAFE_RELEASE(m_pTexture); }; float getX(){return x;}; float getY(){return y;}; void MoveRelative(float dx,float dy,float widthLim=0.0f,float heightLim=0.0f) { x+=dx; if(widthLim!=0 && x<=-widthLim/2 || x>=widthLim/2) x-=dx; y+=dy; if(heightLim!=0 && y<=-heightLim/2 || y>=heightLim/2) y-=dy; }; void MoveTo(float toX,float toY) { x=toX;y=toY; }; void Render() { D3DXMATRIX matWorld; D3DXMatrixTranslation(&matWorld, x, y, 1.0f); //D3DXMatrixRotationY(&matWorld,0); m_pDevice->SetTransform(D3DTS_WORLD,&matWorld); m_pDevice->SetTexture(0, m_pTexture); m_pDevice->SetTextureStageState(0, D3DTSS_ALPHAOP, D3DTOP_MODULATE); m_pDevice->SetFVF(D3DFVF_SCREENOBJECT); m_pDevice->SetStreamSource(0,m_pVB,0,sizeof(D3DVERTEX)); //顶点来源 if(m_pTexture) m_pDevice->SetTexture(0,m_pTexture); m_pDevice->DrawPrimitive(D3DPT_TRIANGLESTRIP,0,2); } }; typedef list
UnitList; class GameApp { public: GameApp(HWND gamehwnd,HINSTANCE hInstance); virtual ~GameApp(); // LRESULT CALLBACK GameApp::WndProc( HWND hwnd, UINT message, // WPARAM wParam, LPARAM lParam); LRESULT FrameStart(); LRESULT Run(); LRESULT InitGame(); LRESULT InitD3D(); LRESULT InitDInput(); LRESULT EndDInput(); LRESULT ProcessDI(); LRESULT ClearD3D(); LRESULT SetMatrices(); LRESULT InitScene(); LRESULT Render(); LRESULT Update(); BOOL LoadScene(char *strMapFile); protected: char m_strKeyState[256]; DIMOUSESTATE m_MouseState; HINSTANCE mhInstance; HWND hwnd; LPDIRECT3D9 m_pD3D; LPDIRECT3DDEVICE9 m_pD3DDevice; D3DSURFACE_DESC m_d3dsdBackBuffer; LPDIRECTINPUT8 m_pDInput; LPDIRECTINPUTDEVICE8 m_pDInputKB; LPDIRECTINPUTDEVICE8 m_pDInputMouse; CCamera *m_pCamera; CTerrain *m_pTerrain; CScreenObject *m_pCursor; CScreenObject *m_pPanel; CUnit *m_pCursorIdicator; CUnit *m_pHero; UnitList m_ObjList; CCube *pCube; CWaveMidi *m_pSound; }; #endif // !defined(AFX_GAMEAPP_H__831ECC45_F71E_440D_BA26_63D95BBDD88E__INCLUDED_)