C++游戏编程(一开篇)

本系列文章由zhmxy555(毛星云)编写,转载请注明出处。

http://blog.csdn.net/zhmxy555/article/details/7318264

作者:毛星云    邮箱: [email protected]    大家别叫我楼主能够吗- -.请叫我浅墨

在从第一节開始看这个笔记系列的话,大家会发现,一上来就開始讲DirectX相关的内容,可是写了几节之后,又開始讲

GDI了。

这是由于我写完前几节后,发觉直接讲DirectX有些生硬。最后我想了一下,应该先梳理完GDI相关的重点知识,再来讲

DirectX,毕竟游戏编程里面windows
API是基础。所以先讲windows API,接着介绍DirectX,最后解说游戏引擎的设

计,这样会自然得多。

————浅墨于2012年3月26日注

非常多朋友在评论中都谈到了GDI的效率问题。关于GDI,我想在这一系列文章的篇首简单的说明一下。

用GDI做游戏的效率非常低,非常的不推荐。可是GDI作为windows与生俱来的渲染引擎,在图形方面是一个全能的存在。

学习游戏编程假设想打好一个坚实的基础,掌握GDI是很有必要的,全能的GDI能够在DirectX尚未做好准备的时候,以一个

强大后援的姿态,在游戏的測试与仿真过程中给予我们莫大的帮助。

————浅墨于2012年4月26日注

非常多朋友也谈到游戏开发中是否运用MFC的困惑,我也在这里简单的说明一下。因为MFC有底层代码的隐蔽性等特点,且MF

C毕竟封装了非常多实际上没用到的东西,不利于游戏开发的效率和游戏的执行速度,不适合做游戏开发。MFC做游戏地图编辑

器之类的工具软件倒是比較适合。我认为一款成功的游戏最主要的特点就是具有流畅的用户体验,这个要求达不到的话,其它

方面就不用考虑了。

————浅墨于2012年4月27日注

在浅墨没更新文章的这三个月里,数百位须要游戏编程相关资料的朋友在博客里留了邮箱,没有及时给大家发到邮箱里浅墨表示很抱歉。在这里,浅墨终于还是决定把这些资料打包上传到CSDN下载频道,这样大家就能够直接下载,省去了浅墨发邮件的功夫,尽管浅墨一直觉得这样更亲切更真诚。当然,0资源分下载是必须的。

以后大家想要这些资料,就不用再留邮箱了,直接点链接去下载就好了。

以下是这些资料的一个清单(零编程基础開始):

1.《C++ primer中文版》

2.《Windows程序设计第五版》

3.《VC++深入具体解释》

4.《Windows核心编程》

5.《Effective STL中文版》

6.《Windows游戏编程大师技巧》

7.《DIRECTX.9.0.3D游戏开发编程基础》

这个书单是从零编程基础開始的,当中部分书中涉及到了DirectDraw与Direct3D 8,这两个API在新版本号DirectX SDK中都被移除了,如今基本上无用武之地,所以涉及到DirectDraw与Direct3D 8的那部分就不用细致看了哈。

本来还有《VC++深入具体解释》的高清影印版,以及《游戏编程精粹》系列的7本书,以及几本C++系列的经典之作,可是它们块头比較大,浅墨眼下这个号在CSDN下载频道仅仅有110Mb的上传限权,传起来比較麻烦。临时就不传了。

以下给出游戏开发学习资料的下载链接:

请点击这里下载:零基础游戏编程学习资料by浅墨

(免责声明:浅墨在这里仅仅是进行了电子版的收集工作,假设大家认为这些书还不错,建议去买纸质版,毕竟这样对眼睛的健康有优点,健康是金钱买不来的)

————浅墨于2012年11月07日

关于学完DirectX,我们该干什么。

浅墨认为,历代DirectX龙书的作者Frank Luna在龙书忽视了很重要的一方面内容的解说,那就是就是学完了DirectX我们接着该做什么。

这大概是非常多怀揣游戏开发梦想的热血青年们以前思考过的问题。

浅墨也以前在这问题上迷茫过,也由于没人指明前路而走了不少弯路。

只是后来在黑暗中不断地摸索,将荆棘变成坦途之后,最终摸索出了一条正确的道路。

也就是看完龙书《DIRECTX.9.0.3D游戏开发编程基础》之后,我们须要怎样学习,来把学到的知识立体化,终于转化为开发游戏的实际能力。首先我们须要再看一本书,《Real-Time Rendering》,也就是(RTR)实时渲染技术,眼下出到第三版了。(这本书并没有中文版,大家假设要走游戏开发的道路,读完龙书之后,剩下基本上都要靠读英文书了。)

学完龙书,也能够选择自己喜欢的游戏引擎来接触并掌握了。看完龙书后浅墨首推学习Irrlight,然后进阶推荐Orge。两者都是开源游戏引擎,都有着源码提供下载学习,并且网上对这两种引擎的研究热情非常高,资料丰富,引擎代码字里行间都是哲思,掌握当中的代码并纳为己用,自己写出像样的游戏demo来是不成不论什么问题的。

————浅墨于2012年12月02日

作为visual C++,DirectX入门的第一讲,概念性东西比較多,这里我们仅仅是简单的整理一下知识框架,给大家一个大概的认知体系,

兴许文章中,我们会展开进行深入的解说。

1.DirectX的定义

首先,我们必须了解DirectX的定义。DirectX,(Direct eXtension,简称DX)是由微软公司创建的多媒体编程接口。由C++编程语言实现,遵循COM。被广泛使用于Microsoft Windows、Microsoft Xbox和Microsoft Xbox 360电子游戏开发,而且仅仅能支持这些平台。最新版本号为DirectX 11,创建在最新的Windows 7上。Microsoft DirectX 是这样一组技术:它们旨在使基于Windows 的计算机成为执行和显示具有丰富多媒体元素(比如全色图形、视频、3D 动画和丰富音频)的应用程序的理想平台。DirectX 包含安全和性能更新程序,以及很多涵盖全部技术的新功能。应用程序能够通过使用DirectX API 来訪问这些新功能。

2.必要的工具和开发环境

要进行游戏的开发,我们必须拥有一套最新的DirectX SDK(软件开发包)。我们能够从微软的官方下载站进行下载然后安装,这里贴出地址,http://msdn.microsoft.com/zh-cn/directx/aa937788.aspx。当然我们还要拥有开发环境,我们选择Microsoft公司的Visual Studio 2010。

3.引擎设计概述

游戏引擎是一系列高级代码,我们能够以它为基础开发自己的游戏。现代的游戏引擎已经对使用他的人隐藏了底层实现的细节和规范。比如,能够在OpenGL和Direct3D的基础上开发渲染引擎,这样,引擎用户就不须要知道使用的是哪一个渲染引擎,虽然也用到了一些底层的东西。

游戏引擎包含:渲染引擎,物理引擎,声音引擎等。游戏引擎本身仅仅是一个由更小的引擎组成的集合。游戏引擎或它涵盖的内容并没有一个精确的定义。

对于视频游戏而言,它的游戏引擎至少要包括渲染引擎和输入引擎,这是必须的,否则,就不能称其为交互式游戏。

游戏程序猿和游戏引擎程序猿完毕的是两种不同的工作。游戏程序猿仅仅与开发游戏的游戏引擎打交道,而游戏引擎程序猿要开发出其它人用于开发游戏的引擎。

4.游戏引擎中的几个关键系统

游戏引擎中的几个关键系统有:游戏渲染系统,输入系统,声音系统,物理系统,动画系统,人工智能(AI)系统等。

5. DirectX API函数

DirectX的API主要由DirectGraphics,DirectInput,DirectPlay,DirectMusic,DirectSound组成。每一个API之间相互独立,负责完毕DirectX内核中不同的功能。DirectX中每一个API都能够通过硬件加速,这意味着这些API能够直接和执行软件的底层硬件对话。以下是各种API函数的概要解释。

DirectGraphics:

DirectGraphics为负责向屏幕渲染二维图形和三维图形的DirectX API,也就是众所周知的Direct3D。

DirectInput:

DirectInput是能够直接使用全部与计算机关联的输入设备的DirectX API。这些设备包含键盘,鼠标和游戏控制器设备。

DirectPlay:

DirectPlay是控制Direct中网络功能的Direct API。DirectPlay能够让应用程序对机器进行网络功能设置,从而能够通过和其它网络玩家交流。

DirectMusic:

DirectMusic是负责普通声音处理的DirectX API。

DirectSound:

DirectSound是负责高级声音处理的DirectX API。

6.动手写一个窗体

在Windows中使用Direct3D创建Win32窗体很easy。要创建一个Win32窗体就必须拥有一个WinMain()函数(这不是废话是什么)。我们能够在MSDN中查到WinMain()的标准句法

int WINAPI WinMain(

HINSTANCE hInstance,

HINSTANCE hPrevInstance,

LPSTR lpCmdLine,

int nCmdShow

);

当程序第一次执行时,WinMain()函数中的全部參数从系统获取自己的对应參数值。通过在WinMain函数内部创建一个类型为WNDCLASSSEX的窗体类对象,创建窗体,然后显示窗体,然后进行消息循环,就能够实现一个空窗体的显示。详细实现代码例如以下:

以下是上面讲的框架代码,也是后面的笔记二的基础,须要结合笔记二一起看。

[cpp] view
plain
copyprint?

  1. LRESULT WINAPI MsgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
  2. {
  3. switch(msg)
  4. {
  5. case WM_DESTROY:
  6. PostQuitMessage(0);
  7. return 0;
  8. break;
  9. }
  10. return DefWindowProc(hWnd, msg, wParam, lParam);
  11. }
  12. int WINAPI WinMain(HINSTANCE hInst, HINSTANCE prevhInst, LPSTR cmdLine, int show)
  13. {
  14. WNDCLASSEX wc = { sizeof(WNDCLASSEX), CS_CLASSDC, MsgProc, 0L, 0L,
  15. hInst, NULL, NULL, NULL, NULL,
  16. "AppClass", NULL };
  17. RegisterClassEx(&wc);
  18. // Create the application‘s window
  19. HWND hWnd = CreateWindow(WINDOW_CLASS, WINDOW_NAME,
  20. WS_OVERLAPPEDWINDOW,
  21. 100, 100, 640, 480, NULL, NULL,
  22. hInst ,NULL);
  23. ShowWindow(hWnd, SW_SHOWDEFAULT);
  24. UpdateWindow(hWnd);
  25. // Enter the message loop
  26. MSG msg;
  27. ZeroMemory(&msg, sizeof(msg));
  28. while(msg.message != WM_QUIT)
  29. {
  30. if(PeekMessage(&msg, NULL, 0U, 0U, PM_REMOVE))
  31. {
  32. TranslateMessage(&msg);
  33. DispatchMessage(&msg);
  34. }
  35. else
  36. {
  37. //Do something to the screen
  38. }
  39. }
  40. // Unregister our window.
  41. UnregisterClass("AppClass", wc.hInstance);
  42. }

发现大家都在留言中说要推荐一下游戏开发相关的书籍,我这里就把各个阶段(从零基础開始)的推荐教程列出来吧,平时我写这个系列的笔记就參考了以下的非常多书籍,大家感兴趣的话,能够深入去学习(推荐去买实体书,这样就不用整天盯着电脑屏幕看伤害眼睛,健康是金钱买不来的):

第一阶段,首先是C++的精通。推荐《C++ Primer》,之后《Effect
C++》。

第二阶段,熟悉windows下的编程。推荐看《Windows程序设计》。

第三阶段,Visual C++的学习。推荐的书目有孙鑫老师的《VC++深入具体解释》和孙鑫老师的vc视频教程。以及侯俊杰老师的《MFC深入具体解释》,与时俱进的有尹成老师的《Visual C++2010开发权威指南》,但这本书推荐有一定的Visual C++基础之后再看。

(第二阶段和第三阶段能够结合着来学习,有非常多知识是相辅相成的,并没有什么大的界限。)

第四阶段,開始学习专门介绍游戏开发的教程(有DirectX和OpenGL两条路可选,这里我们选择DirectX,DirectX在国内为主流。详细比較请移步近期刚写的这篇文章 【Visual
C++】游戏开发笔记十九 DirectX与OpenGL的博弈
),推荐书籍为《DirectX 9.0 3D游戏开发编程基础》(封面为一个红龙的),《Windows游戏编程大师技巧》,《Direct3D游戏开发技术具体解释》等等,当然这类教程就比較多了,新出的有非常多,DirectX相关的层出不穷,也能够选择刚发行不久的新书,毕竟上面讲的知识比較前沿与更具成熟性。(依旧感谢liusofttech  的指出,为什么我没有推荐专门解说3D编程数学基础的教程。我没有专门指出来,是由于差点儿每一本Direct3D教材里面都有一章到几章有关必备数学基础知识的解说。我认为单独来学数学基础不是必需,费时且费力,我们仅仅要在Direct3D教材里掌握相关的数学知识,那就足够了。)

还有什么经典的书籍,欢迎大家交流补充~~

(有一位兄弟提到,《游戏编程精粹》系列的书也比較经典,都是从事游戏开发多年的全球顶尖游戏project师的肺腑之言,尽管常常会有个别错误- -,眼下出了8本了,大家能够去看看)

以上就是本节笔记的所有内容。

更精彩的内容,且看后面的笔记系列。

感谢一直支持【Visual C++】游戏开发笔记系列专栏的朋友们,也恳请大家继续关注我的专栏。

【Visual C++】游戏开发 系列文章才刚刚展开一点而已,由于游戏世界实在是太博大精深了~

但我们不能着急,得慢慢打好基础。做学问最忌好高骛远,不是吗?

浅墨希望看到大家的留言,希望与大家共同交流,希望得到睿智的评论(即使是批评)。

你们的支持是我写下去的动力~

精通游戏开发的路还非常长非常长,非常希望能和大家一起交流,共同学习,共同进步。

大家看过后认为值得一看的话,能够顶一下这篇文章,你们的支持是我继续写下去的动力~

假设文章中有什么疏漏的地方,也请大家指正。也希望能够多留言来和我探讨相关的问题。

最后,谢谢你们一直的支持~~~

The end

C++游戏编程(一开篇)

时间: 2024-08-03 06:38:42

C++游戏编程(一开篇)的相关文章

最大的幻术-游戏开发-到底是先学游戏引擎还是先学游戏编程

学习游戏的目的 我们学习游戏制作,游戏开发,游戏编程,游戏XX,我们的目的只有一个,打造一个非常牛逼,非常屌,非常让人开心的虚拟体验.我们用自己的学识让玩家在虚拟世界征战,生活,一步一步的让玩家幸福!那么我们的目的只有一个,让玩家知道自己的幸福在哪里,并且学会追求自己的幸福.当然,每个人对幸福的定义不一样.那么,我们只好让玩家来体验我们所来表达的最通俗的,最普遍的幸福体验,然后慢慢引导玩家去寻找自己的幸福体验.可能,在最后玩家都会离开游戏,离开虚拟世界,(对,这是真的,玩家需要一步一步达到定点,

《逐梦旅程 WINDOWS游戏编程之从零开始》笔记6——Direct3D中的顶点缓存和索引缓存

第12章 Direct3D绘制基础 1. 顶点缓存 计算机所描绘的3D图形是通过多边形网格来构成的,网网格勾勒出轮廓,然后在网格轮廓的表面上贴上相应的图片,这样就构成了一个3D模型.三角形网格是构建物体模型的基本单元,而一个三角形有3个顶点,为了能够使用大量三角形组成三角形网格来描述物体,需要首先定义号三角形的顶点(Vertex),3个顶点确定一个三角形,顶点除了定义每个顶点的坐标位置外,还还含有颜色等其他属性. 在Direct3D中,顶点的具体表现形式是顶点缓存,顶点缓存保存了顶点数据的内存空

Java游戏编程的几个小经验

1.输出图片,最直接的方式是 Image img = Toolkit.getDefaultToolkit().getImage("images/cheer1.jpg"); graphics.drawImage(img, 0, 0, 500, 500, null); 注意:路径是相对于工程根目录的,不是相对于src的 2.深刻理解 repaint()  update()   paint() 三者之间的关系 每一次输出图片,都要先重新获得一次画笔graphics,(通过getGraphic

【python游戏编程之旅】第一篇---初识pygame

本系列博客介绍以python+pygame库进行小游戏的开发.有写的不对之处还望各位海涵. 参考书籍:<python游戏编程入门> 一.pygame简介 Pygame 是一组用来开发游戏软件的 Python 程序模块,基于 SDL 库的基础上开发.允许你在 Python 程序中创建功能丰富的游戏和多媒体程序,Pygame 是一个高可移植性的模块可以支持多个操作系统.用它来开发小游戏非常适合. 可以去http://www.pygame.org/hifi.html 下载并安装使用pygame. 二

游戏编程与游戏种类

游戏编程指利用计算机编程语言,如C编程语言.C++.java等,编写计算机.手机或游戏机上的游戏. 目前流行的游戏编程语言为C++编程语言,目前流行的游戏编程接口为DirectX9.0,还有OpenGL.SDL(Simple DirectMedia Layer)等.现在手机上玩的游戏分为Android与IOS两种不同平台,分别是用eclipse/MyEclipse和xcode.现在也流行一些跨平台的编程引擎,例如cocos2d-x.unity 3D等. 简介 游戏编程指利用计算机编程语言,如C编

Game Programming Patterns(游戏编程模式)

Game Programming Patterns(游戏编程模式) 大部分游戏开发者在他们游戏项目上总是一个巨大的挑战,总是东拼西凑,修修补补.很多游戏项目常常以失败告终,或者是被淹没在复杂而繁琐的代码中.如何解决这些问题? 各位看官,不管你是对游戏开发感兴趣,或者正在饱受代码不断增长带来的灾难,这本书将是你们的福音! 这本Game Programming Patterns 是由Bob Nystrom(一位在EA待过7年,有着20年游戏开发经历的工程师编写).本书将告诉你,什么模式能够帮你理清和

Game Programming Patterns(游戏编程模式)-简介

游戏编程模式-简介 本系列博客是:Game Programming Patterns 的中文翻译版本. 翻译的github地址: cyh24. 如有兴趣,可联系博主共同翻译,一起造(wu)福(dao)他人. 博客虽然水分很足,但是也算是博主的苦劳了, 如需转载,请附上本文链接http://blog.csdn.net/cyh_24/article/details/46868419,不甚感激! 本系列博客 目录,可点击进入. 简介 ============================ 在我五年级

《游戏编程模式》(8)

<游戏编程模式>最后一篇,刚从英国玩了一圈,春节又要到啦 Chapter 19 对象池 使用固定的对象池重用对象,取代单独地分配和释放对象,达到提升性能和优化内存使用的目的. 使用情境: 频繁创建销毁对象: 对象大小基本一致: 堆上分配内存较慢或可能产生内存碎片: 粒子类: 用union节省内存:粒子使用时用live结构体,不使用时用next指针 1 class Particle 2 { 3 4 public: 5 Particle() 6 : framesLeft_(0) 7 {} 8 9

Java Swing打猎射击游戏编程代码下载

代码下载地址:http://www.zuidaima.com/share/1858069987494912.htm 原文:Java Swing打猎射击游戏编程代码下载 这是一款java swing编写的打猎射击游戏,从这款游戏的编程中,我们可以练习如何进行射击对象的消失及相关按键的监听. 该游戏的一大亮点还是对运动图片的二级缓冲功能,运行时可以感受到非常的流畅,对于想从事游戏编程的人员来说是必须要掌握的一个技能点. 游戏操作:通过鼠标点击野猪和小鸟来是实现击中功能,子弹不足时提示"装载子弹...