📄 碰撞检测.cpp
字号:
// 碰撞检测.cpp : Defines the entry point for the application.
// 学程序编游戏系列丛书
// 唐明理 E_mail: cqtmL@163.com
//====================================================================
#include "stdafx.h"
#include "OpenGL.h"
//////////////////////////////////////////////////////////
OpenGL* m_OpenGL;
HDC hDC;
HGLRC hRC=NULL;
HWND hWnd=NULL;
int Width = 800;
int Height= 600;
int bits = 16;
bool Lbutdown;
///////////////////////////////////////////////////////////
void GameLoop()
{ MSG msg;
BOOL fMessage;
PeekMessage(&msg, NULL, 0U, 0U, PM_NOREMOVE);
while(msg.message != WM_QUIT)
{ fMessage = PeekMessage(&msg, NULL, 0U, 0U, PM_REMOVE);
if(fMessage)
{ TranslateMessage(&msg);
DispatchMessage(&msg);
}
else m_OpenGL->Render();
}
}
LRESULT WINAPI MsgProc(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam )
{ switch(message)
{ case WM_CREATE:
hDC = GetDC(hWnd);
m_OpenGL->SetupPixelFormat(hDC);
return 0; break;
case WM_CLOSE:
m_OpenGL->CleanUp();
PostQuitMessage(0);
return 0; break;
case WM_SIZE:
Height = HIWORD(lParam);
Width = LOWORD(lParam);
if (Height==0) Height=1;
m_OpenGL->init(Width,Height);
return 0; break;
case WM_DESTROY:
PostQuitMessage(0);
return 0; break;
case WM_LBUTTONDOWN: Lbutdown=true ;break;
case WM_LBUTTONUP: Lbutdown=false;break;
case WM_KEYUP:
switch (wParam)
{ case VK_ESCAPE:
m_OpenGL->CleanUp();
PostQuitMessage(0);
return 0;break;
}
default: break;
}
return (DefWindowProc(hWnd, message, wParam, lParam));
}
INT WINAPI WinMain(HINSTANCE hInst,HINSTANCE,LPSTR,INT )
{ bool fullScreen =TRUE;
DWORD dwExStyle;
DWORD dwStyle;
RECT windowRect;
int nX=0,nY=0;
if (MessageBox(NULL,"使用全屏模式吗?", "将进入OpenGL,选择显示模式",
MB_YESNO|MB_ICONQUESTION|MB_SYSTEMMODAL)==IDNO)
{fullScreen =false;}
if (fullScreen)
{ DEVMODE dmScr;
memset(&dmScr,0,sizeof(dmScr));
dmScr.dmSize=sizeof(dmScr);
dmScr.dmPelsWidth = Width;
dmScr.dmPelsHeight= Height;
dmScr.dmBitsPerPel= 16;
dmScr.dmDisplayFrequency=75;
dmScr.dmFields=DM_BITSPERPEL|DM_PELSWIDTH|DM_PELSHEIGHT|DM_DISPLAYFREQUENCY;
if (ChangeDisplaySettings(&dmScr, CDS_FULLSCREEN) != DISP_CHANGE_SUCCESSFUL)
{fullScreen=FALSE;}
dwExStyle=WS_EX_APPWINDOW;
dwStyle=WS_POPUP;
ShowCursor(FALSE);
}
else
{ dwExStyle=WS_EX_APPWINDOW|WS_EX_WINDOWEDGE;
dwStyle=WS_OVERLAPPEDWINDOW;
int wid=GetSystemMetrics(SM_CXSCREEN);
int hei=GetSystemMetrics(SM_CYSCREEN);
nX=(wid-Width)/2;nY=(hei-Height)/2;
}
//-------------------------------------------------------------------
AdjustWindowRectEx(&windowRect,dwStyle,FALSE,dwExStyle);
char cc[]="tml";
WNDCLASSEX wc = { sizeof(WNDCLASSEX), CS_CLASSDC, MsgProc, 0L, 0L,
GetModuleHandle(NULL), NULL, NULL, NULL, NULL,
cc, NULL };
RegisterClassEx( &wc );
m_OpenGL=new OpenGL();//
hWnd = CreateWindowEx(NULL,cc,"学OpenGL编3D游戏 [ 11.碰撞检测 ] 键盘(↑进 ↓退 →右 ←左 UP仰 DOWM俯)",
dwStyle|WS_CLIPCHILDREN|WS_CLIPSIBLINGS,
nX, nY,Width, Height,
NULL,NULL,hInst,NULL);
ShowWindow( hWnd, SW_SHOWDEFAULT );
UpdateWindow( hWnd );
GameLoop();
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -