宏定义部分.docx

上传人:b****8 文档编号:12073011 上传时间:2023-06-04 格式:DOCX 页数:21 大小:22.11KB
下载 相关 举报
宏定义部分.docx_第1页
第1页 / 共21页
宏定义部分.docx_第2页
第2页 / 共21页
宏定义部分.docx_第3页
第3页 / 共21页
宏定义部分.docx_第4页
第4页 / 共21页
宏定义部分.docx_第5页
第5页 / 共21页
宏定义部分.docx_第6页
第6页 / 共21页
宏定义部分.docx_第7页
第7页 / 共21页
宏定义部分.docx_第8页
第8页 / 共21页
宏定义部分.docx_第9页
第9页 / 共21页
宏定义部分.docx_第10页
第10页 / 共21页
宏定义部分.docx_第11页
第11页 / 共21页
宏定义部分.docx_第12页
第12页 / 共21页
宏定义部分.docx_第13页
第13页 / 共21页
宏定义部分.docx_第14页
第14页 / 共21页
宏定义部分.docx_第15页
第15页 / 共21页
宏定义部分.docx_第16页
第16页 / 共21页
宏定义部分.docx_第17页
第17页 / 共21页
宏定义部分.docx_第18页
第18页 / 共21页
宏定义部分.docx_第19页
第19页 / 共21页
宏定义部分.docx_第20页
第20页 / 共21页
亲,该文档总共21页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

宏定义部分.docx

《宏定义部分.docx》由会员分享,可在线阅读,更多相关《宏定义部分.docx(21页珍藏版)》请在冰点文库上搜索。

宏定义部分.docx

宏定义部分

//-----------------------------------【宏定义部分】--------------------------------------------

//描述:

定义一些辅助宏

//------------------------------------------------------------------------------------------------

#defineWINDOW_WIDTH1366//为窗口宽度定义的宏,以方便在此处修改窗口宽度

#defineWINDOW_HEIGHT768//为窗口高度定义的宏,以方便在此处修改窗口高度

#defineWINDOW_TITLE_T//为窗口标题定义的宏

//-----------------------------------【头文件包含部分】---------------------------------------

//描述:

包含程序所依赖的头文件

//------------------------------------------------------------------------------------------------

#include

#include

#include

#include

#include"D3DUtil.h"

#include"D3DGUIClass.h"

//-----------------------------------【库文件包含部分】---------------------------------------

//描述:

包含程序所依赖的库文件

//------------------------------------------------------------------------------------------------

#pragmacomment(lib,"d3d9.lib")

#pragmacomment(lib,"d3dx9.lib")

#pragmacomment(lib,"dinput8.lib")//使用DirectInput必须包含的库文件,注意这里有8

#pragmacomment(lib,"dxguid.lib")

#pragmacomment(lib,"winmm.lib")

//地板的顶点结构

structCUSTOMVERTEX

{

FLOAT_x,_y,_z;

FLOAT_u,_v;

CUSTOMVERTEX(FLOATx,FLOATy,FLOATz,FLOATu,FLOATv)

:

_x(x),_y(y),_z(z),_u(u),_v(v){}

};

#defineD3DFVF_CUSTOMVERTEX(D3DFVF_XYZ|D3DFVF_TEX1)

//-----------------------------------【全局变量声明部分】-------------------------------------

//描述:

全局变量的声明

//------------------------------------------------------------------------------------------------

LPDIRECT3DDEVICE9g_pd3dDevice=NULL;//Direct3D设备对象

LPD3DXFONTg_pTextFPS=NULL;//字体COM接口

LPD3DXFONTg_pTextAdaperName=NULL;//显卡信息的2D文本

LPD3DXFONTg_pTextHelper=NULL;//帮助信息的2D文本

LPD3DXFONTg_pTextInfor=NULL;//绘制信息的2D文本

floatg_FPS=0.0f;//一个浮点型的变量,代表帧速率

wchar_tg_strFPS[50]={0};//包含帧速率的字符数组

wchar_tg_strAdapterName[60]={0};//包含显卡名称的字符数组

boolg_LMBDown=false;//GUI中的鼠标状态信息,鼠标左键是否按下的标识

intg_MouseX=0,g_MouseY=0;//存储鼠标坐标的两个变量

//创建四个GUI类对象,分别代表四个页面

D3DGUIClass*g_MainGUI=NULL;//主窗口

D3DGUIClass*g_StartGUI=NULL;//游戏开始窗口

D3DGUIClass*g_LoadGUI=NULL;//游戏载入窗口

D3DGUIClass*g_OptionGUI=NULL;//游戏设置窗口

intg_MainGUIFontID=-1;//GUI中字体对象的ID

intg_StartGUIFontID=-1;//GUI中字体对象的ID

intg_LoadGUIFontID=-1;//GUI中字体对象的ID

intg_OptionGUIFontID=-1;//GUI中字体对象的ID

intg_currentGUI=GUI_MAIN_SCREEN;//一个当前的GUI标识

//-----------------------------------【全局函数声明部分】-------------------------------------

//描述:

全局函数声明,防止“未声明的标识”系列错误

//------------------------------------------------------------------------------------------------

LRESULTCALLBACKWndProc(HWNDhwnd,UINTmessage,WPARAMwParam,LPARAMlParam);

HRESULTDirect3D_Init(HWNDhwnd,HINSTANCEhInstance);

HRESULTObjects_Init();

voidDirect3D_Render(HWNDhwnd,FLOATfTimeDelta);

voidDirect3D_Update(HWNDhwnd,FLOATfTimeDelta);

voidDirect3D_CleanUp();

floatGet_FPS();

voidHelpText_Render(HWNDhwnd);

voidGUICallback(intid,intstate);

//-----------------------------------【WinMain()函数】--------------------------------------

//描述:

Windows应用程序的入口函数,我们的程序从这里开始

//------------------------------------------------------------------------------------------------

intWINAPIWinMain(HINSTANCEhInstance,HINSTANCEhPrevInstance,LPSTRlpCmdLine,intnShowCmd)

{

//开始设计一个完整的窗口类

WNDCLASSEXwndClass={0};//用WINDCLASSEX定义了一个窗口类,即用wndClass实例化了WINDCLASSEX,用于之后窗口的各项初始化

wndClass.cbSize=sizeof(WNDCLASSEX);//设置结构体的字节数大小

wndClass.style=CS_HREDRAW|CS_VREDRAW;//设置窗口的样式

wndClass.lpfnWndProc=WndProc;//设置指向窗口过程函数的指针

wndClass.cbClsExtra=0;

wndClass.cbWndExtra=0;

wndClass.hInstance=hInstance;//指定包含窗口过程的程序的实例句柄。

wndClass.hIcon=(HICON):

:

LoadImage(NULL,_T("GameMedia\\icon.ico"),IMAGE_ICON,0,0,LR_DEFAULTSIZE|LR_LOADFROMFILE);//从全局的:

:

LoadImage函数从本地加载自定义ico图标

wndClass.hCursor=LoadCursor(NULL,IDC_ARROW);//指定窗口类的光标句柄。

wndClass.hbrBackground=(HBRUSH)GetStockObject(GRAY_BRUSH);//为hbrBackground成员指定一个灰色画刷句柄

wndClass.lpszMenuName=NULL;//用一个以空终止的字符串,指定菜单资源的名字。

wndClass.lpszClassName=_T("ForTheDreamOfGameDevelop");//用一个以空终止的字符串,指定窗口类的名字。

if(!

RegisterClassEx(&wndClass))//设计完窗口后,需要对窗口类进行注册,这样才能创建该类型的窗口

return-1;

HWNDhwnd=CreateWindow(_T("ForTheDreamOfGameDevelop"),WINDOW_TITLE,//喜闻乐见的创建窗口函数CreateWindow

WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT,WINDOW_WIDTH,

WINDOW_HEIGHT,NULL,NULL,hInstance,NULL);

//Direct3D资源的初始化,调用失败用messagebox予以显示

if(!

(S_OK==Direct3D_Init(hwnd,hInstance)))

{

MessageBox(hwnd,_T("Direct3D初始化失败~!

"),_T("浅墨的消息窗口"),0);//使用MessageBox函数,创建一个消息窗口

}

PlaySound(L"GameMedia\\AssassinsCreedTheme刺客信条.wav",NULL,SND_FILENAME|SND_ASYNC|SND_LOOP);//循环播放背景音乐

MoveWindow(hwnd,0,0,WINDOW_WIDTH,WINDOW_HEIGHT,true);//调整窗口显示时的位置,窗口左上角位于屏幕坐标(200,10)处

ShowWindow(hwnd,nShowCmd);//调用Win32函数ShowWindow来显示窗口

UpdateWindow(hwnd);//对窗口进行更新,就像我们买了新房子要装修一样

//消息循环过程

MSGmsg={0};//初始化msg

while(msg.message!

=WM_QUIT)//使用while循环

{

staticFLOATfLastTime=(float):

:

timeGetTime();

staticFLOATfCurrTime=(float):

:

timeGetTime();

staticFLOATfTimeDelta=0.0f;

fCurrTime=(float):

:

timeGetTime();

fTimeDelta=(fCurrTime-fLastTime)/1000.0f;

fLastTime=fCurrTime;

if(PeekMessage(&msg,0,0,0,PM_REMOVE))//查看应用程序消息队列,有消息时将队列中的消息派发出去。

{

TranslateMessage(&msg);//将虚拟键消息转换为字符消息

DispatchMessage(&msg);//该函数分发一个消息给窗口程序。

}

else

{

Direct3D_Update(hwnd,fTimeDelta);//调用更新函数,进行画面的更新

Direct3D_Render(hwnd,fTimeDelta);//调用渲染函数,进行画面的渲染

}

}

UnregisterClass(_T("ForTheDreamOfGameDevelop"),wndClass.hInstance);

return0;

}

//-----------------------------------【WndProc()函数】--------------------------------------

//描述:

窗口过程函数WndProc,对窗口消息进行处理

//------------------------------------------------------------------------------------------------

LRESULTCALLBACKWndProc(HWNDhwnd,UINTmessage,WPARAMwParam,LPARAMlParam)//窗口过程函数WndProc

{

switch(message)//switch语句开始

{

caseWM_PAINT:

//客户区重绘消息

Direct3D_Render(hwnd,0.0f);//调用Direct3D_Render函数,进行画面的绘制

ValidateRect(hwnd,NULL);//更新客户区的显示

break;//跳出该switch语句

caseWM_KEYDOWN:

//键盘按下消息

if(wParam==VK_ESCAPE)//ESC键

DestroyWindow(hwnd);//销毁窗口,并发送一条WM_DESTROY消息

break;

caseWM_DESTROY:

//窗口销毁消息

Direct3D_CleanUp();//调用Direct3D_CleanUp函数,清理COM接口对象

PostQuitMessage(0);//向系统表明有个线程有终止请求。

用来响应WM_DESTROY消息

break;//跳出该switch语句

caseWM_KEYUP:

if(wParam==VK_ESCAPE)PostQuitMessage(0);

break;

caseWM_LBUTTONDOWN:

g_LMBDown=true;

break;

caseWM_LBUTTONUP:

g_LMBDown=false;

break;

caseWM_MOUSEMOVE:

g_MouseX=LOWORD(lParam);

g_MouseY=HIWORD(lParam);

break;

default:

//若上述case条件都不符合,则执行该default语句

returnDefWindowProc(hwnd,message,wParam,lParam);//调用缺省的窗口过程来为应用程序没有处理的窗口消息提供缺省的处理。

}

return0;//正常退出

}

//-----------------------------------【Direct3D_Init()函数】----------------------------------

//描述:

Direct3D初始化函数,进行Direct3D的初始化

//------------------------------------------------------------------------------------------------

HRESULTDirect3D_Init(HWNDhwnd,HINSTANCEhInstance)

{

//--------------------------------------------------------------------------------------

//【Direct3D初始化四步曲之一,创接口】:

创建Direct3D接口对象,以便用该Direct3D对象创建Direct3D设备对象

//--------------------------------------------------------------------------------------

LPDIRECT3D9pD3D=NULL;//Direct3D接口对象的创建

if(NULL==(pD3D=Direct3DCreate9(D3D_SDK_VERSION)))//初始化Direct3D接口对象,并进行DirectX版本协商

returnE_FAIL;

//--------------------------------------------------------------------------------------

//获取硬件设备信息

//--------------------------------------------------------------------------------------

D3DCAPS9caps;intvp=0;

if(FAILED(pD3D->GetDeviceCaps(D3DADAPTER_DEFAULT,D3DDEVTYPE_HAL,&caps)))

{

returnE_FAIL;

}

if(caps.DevCaps&D3DDEVCAPS_HWTRANSFORMANDLIGHT)

vp=D3DCREATE_HARDWARE_VERTEXPROCESSING;//支持硬件顶点运算,我们就采用硬件顶点运算,妥妥的

else

vp=D3DCREATE_SOFTWARE_VERTEXPROCESSING;//不支持硬件顶点运算,无奈只好采用软件顶点运算

//--------------------------------------------------------------------------------------

//填充D3DPRESENT_PARAMETERS结构体

//--------------------------------------------------------------------------------------

D3DPRESENT_PARAMETERSd3dpp;

ZeroMemory(&d3dpp,sizeof(d3dpp));

d3dpp.BackBufferWidth=WINDOW_WIDTH;

d3dpp.BackBufferHeight=WINDOW_HEIGHT;

d3dpp.BackBufferFormat=D3DFMT_A8R8G8B8;

d3dpp.BackBufferCount=2;

d3dpp.MultiSampleType=D3DMULTISAMPLE_NONE;

d3dpp.MultiSampleQuality=0;

d3dpp.SwapEffect=D3DSWAPEFFECT_DISCARD;

d3dpp.hDeviceWindow=hwnd;

d3dpp.Windowed=true;

d3dpp.EnableAutoDepthStencil=true;

d3dpp.AutoDepthStencilFormat=D3DFMT_D24S8;

d3dpp.Flags=0;

d3dpp.FullScreen_RefreshRateInHz=0;

d3dpp.PresentationInterval=D3DPRESENT_INTERVAL_IMMEDIATE;

//--------------------------------------------------------------------------------------

//【Direct3D初始化四步曲之四,创设备】:

创建Direct3D设备接口

//--------------------------------------------------------------------------------------

if(FAILED(pD3D->CreateDevice(D3DADAPTER_DEFAULT,D3DDEVTYPE_HAL,

hwnd,vp,&d3dpp,&g_pd3dDevice)))

returnE_FAIL;

if(!

(S_OK==Objects_Init()))returnE_FAIL;

SAFE_RELEASE(pD3D)//LPDIRECT3D9接口对象的使命完成,我们将其释放掉

returnS_OK;

}

//-----------------------------------【Object_Init()函数】--------------------------------------

//描述:

渲染资源初始化函数,在此函数中进行要被渲染的物体的资源的初始化

//--------------------------------------------------------------------------------------------------

HRESULTObjects_Init()

{

//创建字体

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2