📄 gametank.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 + -