⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gametank.cpp

📁 使用DirectX9 写的通用3D游戏框架
💻 CPP
字号:
#include "GameHeader.h"
#include "GameApp.h"
  #include "GameInput.h"
  #include "GameGUI.h"

//====================================================================
class CGameFPS : public CGameApp
{
public:
	CGameFPS(HINSTANCE hInstance, std::string winCaption, D3DDEVTYPE devType, DWORD vertexProcessType);
	~CGameFPS();

	//重写框架函数
	void InitMenu();
	void UpdateMenu();
	void RenderMenu();

	int  InitScene();
	void UpdateScene();
	void RenderScene();

	void CleanUp();


private:
	CGameGUI		*g_pGameGUI;			//游戏界面

};

//====================================================================
//构造函数
CGameFPS::CGameFPS(HINSTANCE hInstance, std::string winCaption, D3DDEVTYPE devType, DWORD vertexProcessType)
:CGameApp(hInstance, winCaption, devType, vertexProcessType)
{
	g_pGameGUI				= NULL;

}

//====================================================================
//析构函数
CGameFPS::~CGameFPS()
{
	CleanUp();
}

void CGameFPS::InitMenu()
{
	INPUT->InitInput(	DISCL_NONEXCLUSIVE | DISCL_FOREGROUND, DISCL_NONEXCLUSIVE | DISCL_FOREGROUND,
		g_hAppInst, g_hMainWnd);
	if(INPUT == NULL)
		MessageBox(0, "Create DirectInput Failed", 0, 0);

	g_pGameGUI = new CGameGUI(g_pd3dDevice, g_hMainWnd);
	g_pGameGUI->Init();
}

void CGameFPS::UpdateMenu()
{
	INPUT->Update();
	g_pGameGUI->Update();

	if(g_pGameGUI->PlayGame())
	{
		GameState = CGameApp::GAMEPLAY;
	}
	else
	{
		GameState = CGameApp::GAMEMENU;
	}

	if(g_pGameGUI->Loading())
	{
		g_pGameGUI->SetLoaded(InitScene());
	}
}

void CGameFPS::RenderMenu()
{
	g_pGameGUI->Render();
}

//====================================================================
//初始化场景
int CGameFPS::InitScene()
{
	static int iLoaded = 0;

	switch(iLoaded)
	{
	case 0:
		{
			//背面剔除
			g_pd3dDevice->SetRenderState(D3DRS_CULLMODE, D3DCULL_CCW);

			//设置关照
			g_pd3dDevice->SetRenderState(D3DRS_LIGHTING, TRUE);
			g_pd3dDevice->SetRenderState(D3DRS_AMBIENT, D3DCOLOR_XRGB(120,120,120)); 

			D3DXCOLOR		LightColor(D3DCOLOR_XRGB(255, 255, 255));
			D3DXVECTOR3		LightDirection(-1.0f, -1.0f, -1.0f);

			D3DLIGHT9 SunLight;
			ZeroMemory(&SunLight, sizeof(SunLight));

			SunLight.Type      = D3DLIGHT_DIRECTIONAL;
			SunLight.Ambient   = LightColor * 0.6f;
			SunLight.Diffuse   = LightColor;
			SunLight.Specular  = LightColor * 0.6f;
			SunLight.Direction = LightDirection;

			g_pd3dDevice->SetLight(0, &SunLight);
			g_pd3dDevice->LightEnable(0, TRUE);

			//设置雾效
			float start = 1200.0f;
			float end   = 2400.0f;

			g_pd3dDevice->SetRenderState(D3DRS_FOGENABLE,TRUE);						//开启雾化
			g_pd3dDevice->SetRenderState(D3DRS_FOGCOLOR,D3DCOLOR_XRGB(185,210,240));//设置雾的颜色
			g_pd3dDevice->SetRenderState(D3DRS_FOGVERTEXMODE,D3DFOG_LINEAR);		//设置顶点雾化的线形模式
			g_pd3dDevice->SetRenderState(D3DRS_RANGEFOGENABLE,TRUE);				//使用基于距离的顶点雾化
			g_pd3dDevice->SetRenderState(D3DRS_FOGSTART,*(DWORD*)(&start));
			g_pd3dDevice->SetRenderState(D3DRS_FOGEND,*(DWORD*)(&end));
		}

		iLoaded = 10;
		break;
	case 10:
		{
		}

		iLoaded = 20;
		break;
	case 20:
		{
		}

		iLoaded = 30;
		break;
	case 30:
		{

 		}

		iLoaded = 40;
		break;
	case 40:
		{
			Sleep(200);

		}

		iLoaded = 50;
		break;
	case 50:
		{
			Sleep(200);
		}

		iLoaded = 60;
		break;
	case 60:
		{
			Sleep(200);

		}

		iLoaded = 70;
		break;
	case 70:
		{
		}

		iLoaded = 80;
		break;
	case 80:
		{

		}

		iLoaded = 90;
		break;
	case 90:
		{
			
		}

		iLoaded = 100;
		break;
	case 100:
		break;
	}

	return iLoaded;

}

//====================================================================
//更新场景
void CGameFPS::UpdateScene() 
{
	//隐藏鼠标指针
 	SetCursor(NULL);
// 
// 	//更新输入
  INPUT->Update();
// 
}

//====================================================================
//渲染场景
void CGameFPS::RenderScene()
{

	g_pd3dDevice->SetRenderState(D3DRS_FOGENABLE,TRUE);	

}

//====================================================================
//释放资源
void CGameFPS::CleanUp()
{
	SafeDelete(g_pGameGUI);
}

int CALLBACK WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
					 LPSTR lpCmdLine, int nCmdShow)
{
	srand(time(0));
	CGameFPS fps(hInstance, "FPS", D3DDEVTYPE_HAL, D3DCREATE_MIXED_VERTEXPROCESSING);
	g_pGame = &fps;
	g_pGame->Run();

	return 1;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -