游戏开发基础Word文件下载.docx
- 文档编号:14706123
- 上传时间:2022-10-24
- 格式:DOCX
- 页数:45
- 大小:35.37KB
游戏开发基础Word文件下载.docx
《游戏开发基础Word文件下载.docx》由会员分享,可在线阅读,更多相关《游戏开发基础Word文件下载.docx(45页珍藏版)》请在冰豆网上搜索。
刷新游戏单位:
用于每一帧刷新游戏单位的状态,例如改变游戏单位的状态、改变游戏单位的位置、获取外部信息等。
画游戏单位:
用于每一帧往屏幕上画游戏单位的图象,并进行特殊处理以提高速度。
计算机人工智能:
主要用于受计算机处理的游戏单位的行为控制算法,程序部分位于刷新计算机游戏单位部分中。
游戏内存管理:
这一部分对于优质高效的游戏软件是十分重要的,内存管理不当会导致游戏性能的降低,甚至引起死机。
游戏交互设计:
交互设计是游戏可玩性的关键,友好的交互界面和交互方式可以使游戏增色不少。
游戏图象底层设计:
游戏软件的主要处理时间花在处理图象和画图象上,所以游戏图象底层的设计对于游戏的最终效果是十分重要的。
游戏多媒体设计:
主要包括图形界面设计、游戏音乐音效设计、游戏动画设计、游戏影象设计的几个方面,更广泛的说还包括游戏所有运行过程的功能设计。
第二节程序入口
这个标题看起来似乎很难理解,它的意思就是当游戏被启动时,计算机从什么地方开始运行程序的。
在Windows的应用程序上,Winmain()函数一般就是程序入口。
游戏开始后,就调用Winmain()函数,然后再按语句的顺序或所接受到的消息调用相应的函数。
从第三章Windows编程基础中我们了解到Winmain()函数的的结构、运行过程,现在我们就游戏编程的角度来讨论Winmain()函数的编制。
intPASCALWinMain(HINSTANCEhInstance,HINSTANCEhPrevInstance,LPSTRlpCmdLine,
intnCmdShow)
{
MSGmsg;
while(lpCmdLine[0]=='
-'
||lpCmdLine[0]=='
/'
)
lpCmdLine++;
switch(*lpCmdLine++)
case'
e'
:
bUseEmulation=TRUE;
break;
w'
bFullscreen=FALSE;
f'
bFullscreen=TRUE;
1'
CmdLineBufferCount=1;
2'
d'
CmdLineBufferCount=2;
3'
CmdLineBufferCount=3;
s'
bStretch=TRUE;
S'
bWantSound=FALSE;
x'
bStress=TRUE;
?
'
bHelp=TRUE;
bFullscreen=FALSE;
//givehelpinwindowedmode
}
while(IS_SPACE(*lpCmdLine))
GameMode.cx=getint(&
lpCmdLine,640);
GameMode.cy=getint(&
lpCmdLine,480);
GameBPP=getint(&
lpCmdLine,8);
/*
*createwindowandotherwindowsthings
*/
if(!
initApplication(hInstance,nCmdShow))
returnFALSE;
*Giveuserhelpifaskedfor
*
*Thisisuglyfornowbecausethewholescreenisblack
*exceptforthepopupbox.Thiscouldbefixedwithsome
*worktogetthewindowsizerightwhenitwascreatedinstead
*ofdelayingthatwork.seeddraw.c
if(bHelp)
MessageBox(hWndMain,
"
F12-Quit\n"
NUMPAD2-crouch\n"
NUMPAD3-apple\n"
NUMPAD4-right\n"
NUMPAD5-stop\n"
NUMPAD6-left\n"
NUMPAD7-jump\n"
\n"
Commandlineparameters\n"
-eUseemulator\n"
-SNoSound\n"
-1Nobackbuffer\n"
-2Onebackbuffer\n"
-4Threebackbuffers\n"
-sUsestretch\n"
-xDemoorstressmode\n"
OUR_APP_NAME,MB_OK);
*initializeforgameplay
InitGame())
dwFrameTime=timeGetTime();
while
(1)
if(PeekMessage(&
msg,NULL,0,0,PM_NOREMOVE))
if(!
GetMessage(&
msg,NULL,0,0))
{
TranslateMessage(&
msg);
DispatchMessage(&
elseif(!
bPaused&
&
(bIsActive||!
bFullscreen))
ProcessFox(lastInput);
lastInput=0;
else
WaitMessage();
if(AveFrameRateCount)
AveFrameRate=AveFrameRate/AveFrameRateCount;
Msg("
Averageframerate:
%d"
AveFrameRate);
returnmsg.wParam;
}/*WinMain*/
我们知道在消息循环之中只有一个消息----WM_QUIT可以结束这个循环,退出WINDOWS。
所以我们要在消息循环之前完成所有的工作即所有的初始化。
关于初始化这个概念在下一节我们将详细讨论。
在我们提供的例程(在光盘的sample目录中)中的foxbear.c里的WMain()中我们可以看到在消息循环之前先运行DDint()函数对DirectDraw进行初始化,检测命令行参数并对相关的参数进行赋值和确定显示模式,进行窗口的初始化,检测bhelp的值以确定是否显示帮助对话框,进行游戏的初始化。
在一个游戏的消息循环中除了包含一般Windows应用程序的消息循环所应包含的部分外还应有调用有关检测游戏单位状态位置、刷新游戏单位和重画新图以及有关人工智能的函数的部分。
在例程中的消息循环部分包含了一个关于检测游戏单位状态位置、刷新游戏单位和重画新图函数的调用。
在这些调用中一般有两种方法:
1.在消息循环中直接调用有关函数。
比如说在一个RPG的游戏中每个循环都检测主角的的位置是否发生改变,若改变了则在新位置上重画主角的图。
2.通过检测WM_TIMER消息,以决定是否调用有关函数。
即是每隔一段时间(若干个时钟周期),检测一次,然后决定函数的调用与否。
在上面的两种方法里,第一种是现在较常用的,它的缺点是CPU资源占用相对较多,但对不同的机型适应性较强,较稳定。
第二种在一些较老的游戏或对速度要求不高的游戏中较常见,与第一种相比它的CPU资源占用相对较少,但在不同的机型中表现差异极大。
在谈WinMain()的编制时,窗口函数(WINPROC)的编制是必须说的。
窗口函数可以说是把功能不同的函数通过Switch-Case结构连起来组成一个复杂程序的线索。
它的基本编写方法在Windows编程基础中我们就已经谈到了。
仔细阅读例程中的MainWndProc()函数相信对您是有相当大的帮助的。
*MainWndProc
*CallbackforallWindowsmessages
longFARPASCALMainWndProc(HWNDhWnd,UINTmessage,WPARAMwParam,LPARAMlParam)
PAINTSTRUCTps;
HDChdc;
switch(message)
caseWM_SIZE:
caseWM_MOVE:
if(IsIconic(hWnd))
FoxBearisminimized,pausing"
);
PauseGame();
if(bFullscreen)
SetRect(&
rcWindow,0,0,GetSystemMetrics(SM_CXSCREEN),GetSystemMetrics(SM_CYSCREEN));
GetClientRect(hWnd,&
rcWindow);
ClientT
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 游戏 开发 基础