📄 game_root.cpp
字号:
#include "..\Include\Game_Root.h"
#include "..\Include\Game_Timer.h"
#include "..\Include\Game_Input.h"
//#include "..\Include\Game_Hero.h"
#include "..\Include\Game_Camera.h"
#include "..\Include\Game_Font.h"
GlobalObject g_sGlobal;
void Update(float timeStep){
if (g_sGlobal.g_pGame_Input) g_sGlobal.g_pGame_Input->Update();
}
void Loading(INT process){
g_sGlobal.g_pDevice->Clear(0, NULL, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, D3DCOLOR_ARGB(0, 255, 255, 255), 1.0f, 0);
g_sGlobal.g_pDevice->BeginScene();
g_sGlobal.g_pLoading->Render();
g_sGlobal.g_pSprite->Begin(D3DXSPRITE_ALPHABLEND);
D3DXMATRIX mat;
D3DXMatrixIdentity(&mat);
//得到2D坐标转换矩阵
D3DXMatrixTransformation2D(&mat, NULL, 0.0f, &g_sGlobal.g_pLoadingBar->m_pInterface->m_Scale,
NULL, 0.0f, &g_sGlobal.g_pLoadingBar->m_pInterface->m_Position);
g_sGlobal.g_pSprite->SetTransform(&mat);
if (g_sGlobal.g_pLoadingBar->m_pInterface->m_nWidth<=0){
g_sGlobal.g_pLoadingBar->m_pInterface->m_nWidth=0;
}
g_sGlobal.g_pLoadingBar->m_pInterface->m_nWidth=process*2;
g_sGlobal.g_pLoadingBar->m_pInterface->m_ShownRect.right=g_sGlobal.g_pLoadingBar->m_pInterface->m_nWidth;
g_sGlobal.g_pSprite->Draw(g_sGlobal.g_pLoadingBar->m_pInterface->m_pTexture,
&g_sGlobal.g_pLoadingBar->m_pInterface->m_ShownRect, NULL, NULL, 0xffffffff);
g_sGlobal.g_pSprite->End();
g_sGlobal.g_pDevice->EndScene();
//翻转缓冲区
g_sGlobal.g_pDevice->Present(NULL, NULL, NULL, NULL);
}
void Render(float timeStep){
g_sGlobal.g_pGameApp->m_pGame_Hero->SetInput3D(timeStep);//输入
g_sGlobal.g_pDevice->Clear(0, NULL,D3DCLEAR_TARGET|D3DCLEAR_ZBUFFER,D3DCOLOR_XRGB(0, 0, 0), 1.0f, 0);
g_sGlobal.g_pDevice->BeginScene();
//渲染及摄象机转换
g_sGlobal.g_pGameApp->m_pGame_Camera->Update3DMatrix();
g_sGlobal.g_pGameApp->Render3D(timeStep);
g_sGlobal.g_pGameApp->m_pGame_Font->Render(timeStep);
g_sGlobal.g_pGameApp->Render2D(timeStep);
g_sGlobal.g_pLoading->Render();
g_sGlobal.g_pLoadingBar->Render();
//结束渲染
g_sGlobal.g_pDevice->EndScene();
//翻转缓冲区
g_sGlobal.g_pDevice->Present(NULL, NULL, NULL, NULL);
}
void MainLoop(){
// Enter the message loop
MSG msg;
ZeroMemory( &msg, sizeof(msg) );
while(msg.message!=WM_QUIT){
if( PeekMessage(&msg,NULL,0U,0U,PM_REMOVE)){
TranslateMessage(&msg);
DispatchMessage(&msg);
}
else{
float timeStep = g_sGlobal.g_pGame_Timer->GetElapsedTime();
Update(timeStep);
Render(timeStep);
}
}
}
bool Setup(wchar_t* title, bool windowed){
HRESULT result;
WNDCLASSEX wc = { sizeof(WNDCLASSEX), CS_CLASSDC, MsgProc, 0L, 0L,
GetModuleHandle(NULL), NULL, LoadCursor( NULL, IDC_ARROW ), NULL, NULL,
L"EasyBaby", NULL };
wc.hCursor=LoadCursorFromFile(L"Date\\Interface\\shubiao.cur");
//wc.hIcon=LoadIcon(hInstance,L"directx.ico");
//DWORD dwWindowStyle =NULL;//不可最大化
//DWORD dwWindowStyle =WS_SYSMENU|WS_MAXIMIZEBOX;//不可最大化
//DWORD dwWindowStyle =WS_OVERLAPPEDWINDOW;
RegisterClassEx( &wc );
g_sGlobal.g_hwnd = CreateWindow( L"EasyBaby", title,
WS_OVERLAPPEDWINDOW, 100, 100, 800, 600,
NULL, NULL, wc.hInstance, NULL );
g_sGlobal.g_pD3D = Direct3DCreate9( D3D_SDK_VERSION );
ZeroMemory( &g_sGlobal.g_pParameters, sizeof(g_sGlobal.g_pParameters));
g_sGlobal.g_pParameters.BackBufferCount = 1;
g_sGlobal.g_pParameters.Windowed = windowed;
g_sGlobal.g_pParameters.SwapEffect = D3DSWAPEFFECT_DISCARD;
g_sGlobal.g_pParameters.BackBufferFormat = D3DFMT_UNKNOWN;
g_sGlobal.g_pParameters.EnableAutoDepthStencil = TRUE;
g_sGlobal.g_pParameters.AutoDepthStencilFormat = D3DFMT_D16;
g_sGlobal.g_bWindow=windowed;
if (!windowed){
g_sGlobal.g_pParameters.BackBufferWidth = 1024;
g_sGlobal.g_pParameters.BackBufferHeight = 768;
g_sGlobal.g_pParameters.BackBufferFormat = D3DFMT_A8R8G8B8;
g_sGlobal.g_pParameters.PresentationInterval = D3DPRESENT_INTERVAL_IMMEDIATE;
}
else{
g_sGlobal.g_pParameters.BackBufferWidth = 800;
g_sGlobal.g_pParameters.BackBufferHeight = 600;
}
g_sGlobal.g_nScreenWidth=g_sGlobal.g_pParameters.BackBufferWidth;
g_sGlobal.g_nScreenHeight=g_sGlobal.g_pParameters.BackBufferHeight;
// Create the D3DDevice
result = g_sGlobal.g_pD3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, g_sGlobal.g_hwnd,
D3DCREATE_SOFTWARE_VERTEXPROCESSING,
&g_sGlobal.g_pParameters, &g_sGlobal.g_pDevice);
if (result != S_OK) {
MessageBox(0, L"Create g_pDevice Fail!", L"Error", 0);
return false;
}
//g_sGlobal.g_pDevice->SetRenderState(D3DRS_LIGHTING,D3DZB_FALSE);
g_sGlobal.g_pDevice->SetRenderState(D3DRS_LIGHTING,true);
g_sGlobal.g_pDevice->SetRenderState(D3DRS_CULLMODE, D3DCULL_CCW);//D3DCULL_NONE,D3DCULL_CCW
g_sGlobal.g_pDevice->SetRenderState(D3DRS_ZENABLE, D3DZB_TRUE);
g_sGlobal.g_pDevice->SetRenderState( D3DRS_ZFUNC, D3DCMP_LESSEQUAL/*D3DCMP_GREATEREQUAL*D3DCMP_LESSEQUAL//*D3DCMP_LESS*/ );
//可以写入Z值缓冲 默认为TRE
g_sGlobal.g_pDevice->SetRenderState(D3DRS_ZWRITEENABLE, TRUE);
//g_sGlobal.g_pDevice->SetSamplerState(0, D3DSAMP_MAGFILTER, D3DTEXF_LINEAR);
//g_sGlobal.g_pDevice->SetSamplerState(0, D3DSAMP_MINFILTER, D3DTEXF_LINEAR);
//static float fogStart = 300; //线性雾化开始位置
//static float fogEnd = 2000; //线性雾化结束位置
//g_sGlobal.g_pDevice->SetRenderState(D3DRS_FOGCOLOR, 0xffffffff);
//g_sGlobal.g_pDevice->SetRenderState(D3DRS_FOGENABLE, true); //激活雾化
////设置雾化混合因子计算公式
//g_sGlobal.g_pDevice->SetRenderState(D3DRS_FOGVERTEXMODE,D3DFOG_LINEAR);
//g_sGlobal.g_pDevice->SetRenderState(D3DRS_FOGSTART, *(DWORD*)&fogStart);
//g_sGlobal.g_pDevice->SetRenderState(D3DRS_FOGEND, *(DWORD*)&fogEnd);
//g_sGlobal.g_pDevice->SetRenderState(D3DRS_RANGEFOGENABLE, true); //启用基于范围的物化
//D3DXCreateFont( g_sGlobal.g_pDevice, 14, 7, 1, 0, 0, \
//DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH | FF_DONTCARE, L"Arial", &g_sGlobal.font );
D3DXCreateFont(g_sGlobal.g_pDevice,0,0,0,0,0,0,0,0,0, L"Arial", &g_sGlobal.g_pFont);
D3DXCreateSprite(g_sGlobal.g_pDevice, &g_sGlobal.g_pSprite);
g_sGlobal.g_pGame_Input = new Game_Input;
g_sGlobal.g_pGame_Input->Init();
g_sGlobal.g_pGame_Timer = new Game_Timer;
if (windowed){//窗口
g_sGlobal.g_pLoading=new Game_UIBar(L"Date\\Interface\\chibi1.bmp",
g_sGlobal.g_nScreenWidth,g_sGlobal.g_nScreenHeight,
D3DXVECTOR2(1.0f,0.6f),D3DXVECTOR2(0,0),true);
g_sGlobal.g_pLoadingBar=new Game_UIBar(L"Date\\Interface\\LoadingBar.png",
0,13,D3DXVECTOR2(0.78f,1.0f),
D3DXVECTOR2(0,g_sGlobal.g_nScreenHeight-(13*2)),true);
}
else{//全屏幕
g_sGlobal.g_pLoading=new Game_UIBar(L"Date\\Interface\\chibi1.bmp",
g_sGlobal.g_nScreenWidth,g_sGlobal.g_nScreenHeight,
D3DXVECTOR2(1.0f,0.78f),D3DXVECTOR2(0,0),true);
g_sGlobal.g_pLoadingBar=new Game_UIBar(L"Date\\Interface\\LoadingBar.png",
0,13,D3DXVECTOR2(1.0f,1.0f),
D3DXVECTOR2(0,g_sGlobal.g_nScreenHeight-(13*2)),true);
}
UnregisterClass( L"EasyBaby", wc.hInstance );
ShowWindow( g_sGlobal.g_hwnd, SW_SHOWDEFAULT );
UpdateWindow( g_sGlobal.g_hwnd );
return true;
}
void Cleanup(){
SAFE_RELEASE(g_sGlobal.g_pDevice);
SAFE_RELEASE(g_sGlobal.g_pD3D);
SAFE_RELEASE(g_sGlobal.g_pGame_Input);
SAFE_RELEASE(g_sGlobal.g_pSprite);
}
LRESULT WINAPI MsgProc( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam ){
switch( msg ){
case WM_DESTROY:
Cleanup();
PostQuitMessage( 0 );
return 0;
}
return DefWindowProc( hWnd, msg, wParam, lParam );
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -