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

📄 碰撞检测.cpp

📁 实现3D游戏碰撞
💻 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 + -