偶然发现了本很棒的游戏编程入门书 - 《Windows游戏编程大师技巧》。说是大师技巧,其实还是很深入浅出的。
它涵盖了Windows图形编程的方方面面,从Win32的Helloworld程序,到GDI简介,再到DirectX的API。很适合我
这种Windows编程的菜鸟,所以很喜欢这本书的内容。
觉得这本书好的另一个原因是:虽然内容丰富,但没有涉及Windows编程比较繁琐的地方,基本就是Win32加DirectX。
这对于不想深入学习COM、MFC等等Windows平台上众多繁杂的技术的人来说很适合。尤其是刚学完C语言,需要一些
练手的小项目。Windows下的C编程与Linux下相比,比较有趣,图形化看起来也比较有成就感。
历史一瞥
早期的PC机落后于家用游戏机,最强大的游戏机统治了游戏市场。
DOOM的出现和成功证明了一点:只要足够聪明,人们可以使PC机做任何事。
在DOOM热的冲击下,微软开始重新评价自己在游戏编程上的地位,它意识到娱乐产业的巨大。
但Win95实时处理视频音频的能力很差,于是微软制作了一个叫Win-G的软件,但失败了。
事实上,它不过是一堆用于画位图的图形调用而已。
随后DirectX诞生了,最初的两个版本有太多糟糕的缺陷,微软低估了视频游戏编程的复杂性。
直到DirectX 5.0发布,人们才从DOS上转到Windows上进行开发。
设计游戏
3D数学很难,但策划和设计一个有趣的游戏可谓同样困难、重要。
想出一个游戏点子并不特别难,关键是细节、最终实现和视觉效果。
游戏的构成
编写MS Word程序虽然难,但是编写Unreal游戏则要比编写我所知道的其他任何程序都要难。
大多数情况下,游戏循环是一个含有大量状态的有限状态自动机。
常规游戏编程指导规范
视频游戏是超高性能的计算机程序。不能在对运行时间或内存要求特别严格的代码段中使用高层API。
特别是与游戏内循环有关的代码大都需要手工编写。除此之外,还应留意下列技巧。
技巧1 全局变量代替参数传递
不要怕使用全局变量,许多视频游戏不让对时间要求严格的函数使用参数,而用全局变量来传递参数。
void Plot(int x, int y, int color)
{
// plot a pixel on the screen
video_buffer[x + y*MEMORY_PITCH] = color;
}
由于参数要被压栈、出栈,执行这个函数体的时间小于调用函数的时间。所以可以设立一些全局变量,
在调用前赋值以传递参数。
int gx, gy, gz, gcolor; // define some globals
void Plot_G(void)
{
// plot a pixel using globals
video_buffer[gx + gy*MEMORY_PITCH] = gcolor;
}
技巧2 内联函数
使用内联函数inline指示编译器用函数体代码去替换函数调用。这样做会使编译后的程序变大,
但却有效地提高了运行速度。
inline void Plot_I(int x, int y, int color)
{
// plot a pixel on the screen
video_buffer[x + y*MEMORY_PITCH] = color;
}
技巧3 尽量用32位变量
奔腾处理器是全32位架构的,较小的变量会降低寻址速度。
struct CPOINT
{
short x, y
unsigned char c;
}
这个结构没有注意字节对齐,一共5字节。
struct CPOINT
{
int x, y;
int c;
}
一共12字节。浪费了许多内存,但换来了速度的提升。
技巧4 使用二进制移位运算
int y_pos = 10;
// multiply y_pos by 64
y_pos = (y_pos << 6); // 2^6 = 64
// divide y_pos by 8
y_pos = (y_pos >> 3);
技巧5 设计算法
设计高效率的算法,没有任何一种汇编语言能使复杂度为O(n²)的算法运行的更快。
开发环境配置
1.安装DirectX运行时。
2. 安装DirectX SDK包。
3. 新建Win32工程,将SDK目录下的Lib文件夹中的库函数和Include文件夹中的头文件导入到工程中。
4. 开始开发!具体编译链接过程如下图所示。
分享到:
相关推荐
本资源是参照windows游戏编程开发而来 楼主精心研究成果非常适合新手
本书是对游戏编程爱好者入门的好教程,内有多个实例,五子棋,走迷宫。。。。
一个flash文件,很有动漫色彩,画面清丽,值得细细品味!
搜索术-一-学海无涯搜索作舟 进入二十一世纪,web2.0 方兴未艾,移动互联就闪亮 登场,物联网、云计算摩肩接踵,大数据、人工智能 潮水般涌来。人类积累的知识量以指数级剧增的时间 周期也越来越短。截止到2016 年,...
实验是培养学生动手能力、分析解决问题能力的重要环节;实验报告是反映实验教学水平与质量的重要依据。为加强实验过程管理,改革实验成绩考核方法,改善实验教学效果,提高学生质量,特制定实验教学管理基本规范。...
七年级道德与法治上册第八课学海无涯乐作舟复习教案苏教版.doc
国外学者将500万篇CS论文搬进了毕业论文,结论:学海无涯“卷”作舟.rar
国外学者将500万篇CS论文搬进了毕业论文,结论:学海无涯“卷”作舟.pdf
mitmproxy是一个支持HTTP和HTTPS的抓包程序,有类似Fiddler、Charles的功能,只不过它是一个控制台的形式操作。...另一个是mitmweb,它是一个Web程序,通过它我们可以清楚观察mitmproxy捕获的请求。
Java经典编程题-学生.doc
一个除错诊断工具,你可以使用Debugging Tools for Windows去测试你的Windows
windows 版本安装 包含的包 openjdk-14.0.1_windows-x64_bin nginx-1.18.0 graviteeio-full-3.5.0 elasticsearch-7.10.1.msi mongodb-windows-x86_64-4.4.2-signed.msi 亲测可以安装, 安装步骤 1、 jdk 2、 ...
Rookie Note 资料纯属个人兴趣整理。 配置 如果出现图片展示问题,可以在 hosts 文件中加入: # GitHub Start 140.82.113.3 github.com 140.82.114.20 gist.github.com ...151.101.184.133 avatars0.githubusercont
不禁让人想起了一句话“学海无涯苦作舟,书山无径勤为路!” 本PPT模板适合用于制作各类励志教育PPT,学习笔记幻灯片等。 关键词:清新、绿色PPT背景,书籍‘、课本幻灯片背景图片,教育学习PPT模板下载,.PPT格式...
chenzhenguo - MYSQL5.0——WINDOWS安装版.zip, mysql-5.0.45-win32.zip
希望能给学员带去方便,学到更多的知识个
Tree DIFF是对树的每一层进行遍历,如果某组件不存在了,直接直接销毁。如图所示,左边是旧属,右边是新属,第一层是R组件,一模一样,不会发生变化;第二层进入Component DIFF,相同类型组件继续比较下去,发现A...
mysql-connector-python-8.0.18-windows-x86-64
专门为零基础或者稍微接触过Python的人才们准备录制的一套精美大餐,学海无涯苦做舟,Python知识也是无穷尽也,所以这里只有最基础的Python知识点,不停地巩固和加强基础的掌握,只有脚踏实地,才能稳步向前。...