📄 engine.cpp
字号:
#include "engine.h"
#include "model.h"
CEngine::CEngine(void)
{
d3d=0;
Device=0;
Width=900;
Height=600;
windowed=true;
MenuSelect=0;
Condition=0;
MaxScore=5;
}
CEngine::~CEngine(void)
{
if(Device)
Device->Release();
if(d3d)
d3d->Release();
}
bool CEngine::InitD3D(HINSTANCE hInst)
{
WNDCLASS wc;
wc.style = CS_HREDRAW | CS_VREDRAW;
wc.lpfnWndProc = (WNDPROC)WinProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = hInst;
wc.hIcon = LoadIcon(0, IDI_APPLICATION);
wc.hCursor = LoadCursor(0, IDC_ARROW);
wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
wc.lpszMenuName = 0;
wc.lpszClassName = "Battle Balls";
if( !RegisterClass(&wc) )
return false;
HWND hwnd = 0;
hwnd = CreateWindow("Battle Balls", "Battle Balls",
WS_EX_TOPMOST|WS_SYSMENU,
0, 0, Width, Height,
0 /*parent hwnd*/, 0 /* menu */, hInst, 0 /*extra*/);
if( !hwnd )
return false;
ShowWindow(hwnd, SW_SHOW);
UpdateWindow(hwnd);
d3d=Direct3DCreate9(D3D_SDK_VERSION);
if(!d3d)
return false;
//set vertex processing mode
D3DDISPLAYMODE d3ddm;
if(FAILED(d3d->GetAdapterDisplayMode(D3DADAPTER_DEFAULT,&d3ddm)))
return false;
D3DCAPS9 caps;
d3d->GetDeviceCaps(D3DADAPTER_DEFAULT,D3DDEVTYPE_HAL, &caps);
int vp = 0;
if( caps.DevCaps & D3DDEVCAPS_HWTRANSFORMANDLIGHT )
vp = D3DCREATE_HARDWARE_VERTEXPROCESSING;
else
vp = D3DCREATE_SOFTWARE_VERTEXPROCESSING;
D3DPRESENT_PARAMETERS d3dpp;
d3dpp.BackBufferWidth = Width;
d3dpp.BackBufferHeight = Height;
d3dpp.BackBufferCount = 1;
d3dpp.MultiSampleType = D3DMULTISAMPLE_NONE;
d3dpp.MultiSampleQuality = 0;
d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
d3dpp.hDeviceWindow = hwnd;
d3dpp.Windowed = windowed;
d3dpp.EnableAutoDepthStencil = true;
d3dpp.AutoDepthStencilFormat = D3DFMT_D24S8;
d3dpp.Flags = 0;
d3dpp.FullScreen_RefreshRateInHz = D3DPRESENT_RATE_DEFAULT;
d3dpp.PresentationInterval = D3DPRESENT_INTERVAL_IMMEDIATE;
if(depth==32)
d3dpp.BackBufferFormat = D3DFMT_A8R8G8B8;
else
d3dpp.BackBufferFormat = D3DFMT_A4R4G4B4;
if(FAILED(d3d->CreateDevice(D3DADAPTER_DEFAULT,D3DDEVTYPE_HAL,hwnd,vp,&d3dpp,&Device)))
{
d3d->Release();
return false;
}
return true;
}
void CEngine::GameLoop()
{
MSG msg;
BOOL fMessage;
static float lastTime = (float)timeGetTime();
PeekMessage(&msg, NULL, 0U, 0U, PM_NOREMOVE);
while(msg.message != WM_QUIT)
{
fMessage = PeekMessage(&msg, NULL, 0U, 0U, PM_REMOVE);
if(fMessage)
{
//Process message
TranslateMessage(&msg);
DispatchMessage(&msg);
}
else
{
float currTime = (float)timeGetTime();
float timeDelta = (currTime - lastTime)*0.001f;
ptr_display(timeDelta);
lastTime = currTime;
}
}
}
void CEngine::InitText(ID3DXMesh **p_mesh,char *p_text)
{
HDC hdc;
HFONT font;
hdc=CreateCompatibleDC(NULL);
font=CreateFont(10, //Height
0, //Width
0, //Escapement
0, //Orientation
FW_NORMAL, //Weight
false, //Italic
false, //Underline
false, //Strikeout
DEFAULT_CHARSET,//Charset
OUT_DEFAULT_PRECIS, //Output Precision
CLIP_DEFAULT_PRECIS, //Clipping Precision
DEFAULT_QUALITY, //Quality
DEFAULT_PITCH|FF_DONTCARE, //Pitch and Family
"Comic Sans MS");
SelectObject(hdc, font);
D3DXCreateText(Device, //Device
hdc, //GDI Device Context
p_text, //Text
0.001f, //Maximum chordal deviation from true font outlines
0.4f, //Extrusion depth (along -Z axis)
p_mesh, //Mesh
NULL, //Adjacency information
NULL);
DeleteObject(font);
DeleteDC(hdc);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -