欢迎来到天天文库
浏览记录
ID:26110531
大小:82.00 KB
页数:49页
时间:2018-11-24
《游戏开发基础(7)》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、游戏开发基础(7)第七章游戏编程的特点第一节概述:电脑游戏在计算机发展使用中可以说扮演了一个极为有趣的角色,一方面不为很多人所赞同,认为是一种浪费;而另一方面电脑游戏却是推动计算机的各项技术迅速发展的最有力的力量之一。这一点,可以从3d类游戏对硬件无止境的需求,游戏迷对游戏图像的质量、游戏的交互性、人机界面的友好性等方面的需求体现出来(当然游戏迷对游戏的的构思、创意的要求也是苛刻且无止境的,但这一点只有靠您自己的想象力,我们是爱莫能助了)。从游戏近期的发展中,我们从3d游戏的发展,可以看到从Doom到现在的古墓丽影2、雷神之锤2,3d游戏的画面从生硬单调的多边形到今天柔
2、和复杂几进乱真的场景、道具、怪物,敌人从只会疯狂向你冲来到今天会偷袭、会审时度势地采取合适的方式方法向你进攻;游戏无论从硬件支持还是编程技术方面都有突飞猛进的进展。在游戏发展的过程中,很多技术也随之发展起来了,例如各种图形加速卡的出现和发展,directx的出现,和各个成功游戏中采用的各种优化技术都推动了计算机技术的发展。游戏可以说是集合了每个时期计算机行业中最先进的硬件技术和最新的编程思想,比如近期的游戏都是采用了面向对象的编程思想的基于Windows的软件,大部分图象要求高的游戏都要求或支持图形加速卡。同时游戏编程中也有自己基本的方式方法、结构和理论,在这一章的学习
3、中我们将讨论这些问题。在这一章中我们将讨论下面几个问题:程序入口即是游戏获取外部操作的讯息,得到下次刷新所需的新参数的手段。如同一般的SDKWindows应用程序一样,程序的入口为WINMAIN()。游戏初始化包括创建标准的WINDOWS程序所需的初始化程序以及游戏内部的初始化程序,例如游戏系统初始化、游戏图形的装入、游戏声音的装入等。游戏内部循环:游戏的循环入口是WINDOWS消息循环内部的一个函数调用,游戏内部循环包括刷新游戏单位、画游戏单位两部分。刷新游戏单位:用于每一帧刷新游戏单位的状态,例如改变游戏单位的状态、改变游戏单位的位置、获取外部信息等。画游戏单位:用
4、于每一帧往屏幕上画游戏单位的图象,并进行特殊处理以提高速度。计算机人工智能:主要用于受计算机处理的游戏单位的行为控制算法,程序部分位于刷新计算机游戏单位部分中。游戏内存管理:这一部分对于优质高效的游戏软件是十分重要的,内存管理不当会导致游戏性能的降低,甚至引起死机。游戏交互设计:交互设计是游戏可玩性的关键,友好的交互界面和交互方式可以使游戏增色不少。游戏图象底层设计:游戏软件的主要处理时间花在处理图象和画图象上,所以游戏图象底层的设计对于游戏的最终效果是十分重要的。游戏多媒体设计:主要包括图形界面设计、游戏音乐音效设计、游戏动画设计、游戏影象设计的几个方面,更广泛的说还
5、包括游戏所有运行过程的功能设计。第二节程序入口这个标题看起来似乎很难理解,它的意思就是当游戏被启动时,计算机从什么地方开始运行程序的。在Windows的应用程序上,Winmain()函数一般就是程序入口。游戏开始后,就调用Winmain()函数,然后再按语句的顺序或所接受到的消息调用相应的函数。从第三章Windows编程基础中我们了解到Winmain()函数的的结构、运行过程,现在我们就游戏编程的角度来讨论Winmain()函数的编制。intPASCALWinMain(HINSTANCEhInstance,HINSTANCEhPrevInstance,LPSTRlpCm
6、dLine,intnCmdShow){MSGmsg;while(lpCmdLine[0]=='-'
7、
8、lpCmdLine[0]=='/'){lpCmdLine++;switch(*lpCmdLine++){case'e':bUseEmulation=TRUE;break;case'w':bFullscreen=FALSE;break;case'f':bFullscreen=TRUE;break;case'1':CmdLineBufferCount=1;break;case'2':case'd':CmdLineBufferCount=2;break;case'3':Cmd
9、LineBufferCount=3;break;case's':bStretch=TRUE;break;case'S':bWantSound=FALSE;break;case'x':bStress=TRUE;break;case'?':bHelp=TRUE;bFullscreen=FALSE;//givehelpinwindowedmodebreak;}while(IS_SPACE(*lpCmdLine)){lpCmdLine++;}}GameMode.cx=getint(&lpCmdLine,640);GameMode.cy=getin
此文档下载收益归作者所有