找回密码
 立即注册
查看: 1489|回复: 20

为什么我用c++写的游戏那么简陋?

[复制链接]
发表于 2020-12-21 09:42 | 显示全部楼层 |阅读模式
为什么我用c++写的游戏那么简陋?
发表于 2020-12-21 09:50 | 显示全部楼层
C++ 标准库的确没有提供图形和音频的功能,需要这些方面的功能要依靠不同平台提供的 API,或是在这些 API 之上实现的程序库。例如 OpenGL 是一个古老的跨平台图形 API,而 SDL 则是包装了这些 API 的程序库。再大型一些的是游戏引擎,除了底层的包装,还有完整的渲染系统、动画系统、物理系统、游戏逻辑框架等实现及相关工具,例如知名的 Unreal 引擎。
举一些参与过的游戏作为例子。
20年前大二的时候刚看书自学了一点 OpenGL,所以人工智能科的功课就用了 OpenGL 来做界面(使用 VC6):
《爱丽丝:疯狂回归》采用 Unreal Engine 3、以 C++ 和 UnrealScript 编程的游戏:
《天涯明月刀》则采用 C++ 自研开发的 QuickSilver 引擎来制作的:
游戏相关的知识很多,
年轻人,你渴望力量吗?

miloyip/game-programmer

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
发表于 2020-12-21 09:57 | 显示全部楼层
C++不好直接拿来做游戏。因为C++本身不提供图形等多媒体的功能,如果要强行撸一款游戏出来,要么是类似于题主这样的控制台游戏;要么就需要使用其他诸如OpenGL、DirectX、Vulkan等第三方图形库,这些都需要先学习、攻下这些图形库的堡垒才能做出一些能玩的简单游戏。
那为什么又说C++适合做游戏开发呢,那是因为C++是最接近底层语言高级编程语言,在性能上领先其他高级编程语言,而游戏又是对性能要求非常高的一个业务方向,所以大部分游戏引擎都是由C++代码写出来的,上述的图形库也是由C++编写的。


当然这些都是建立在对C++语言非常熟悉,踩过很多很多坑的基础上的。因为你要从头开始造轮子。从最开始的图形库开始写游戏,相当于自己根据自己的需要去写一个小型的游戏引擎,然后再在这个引擎上面去做游戏业务逻辑、做游戏表现。
DirectX11与游戏编程学习路线自拟 - fruit的博客 - CSDN博客

大部分初学者对以上所说应该是望而生畏的。那如果是C++新手呢,可以做一款能玩且效果过得去的游戏吗?
当然可以,因为在我们之前的一波波大牛不仅仅在C++基础上实现了一个个图形库,还实现了一个个游戏引擎,这样我们可以在初学的时候不用关心底层图形怎么加载怎么渲染,不用关心声音怎么播放,不用关心物理系统底层怎么模拟,只需要使用它们实现我们相关的游戏逻辑。比如说UnrealEngine,Unity3D,这两款引擎底层都是使用C++实现的,且涵盖有上述题主关心的功能,这两个引擎各有千秋,都能非常简单方便的实现一款游戏的Demo。如果题主想使用C++编程,推荐使用UnrealEngine,如果想要更加简单化,推荐使用Unity。


如果想要纯粹一点的C++开发体验,可以考虑cocos2dx(C++版),虽然有点过时,但是对学习C++来说还挺合适的,网上资料也丰富。
发表于 2020-12-21 10:01 | 显示全部楼层
2019年5月补:
该游戏作为练习项目,在我写的《白话++》下册。该书上册已在网上各平台销售。欢迎C++新手购买。
-----
看到问题自然想起二十年前自学BASIC,最大的动力就是想“写”出一个飞机从屏幕上飞过,然后按空格键可以发射由字母组成的炮弹去攻击飞机的游戏(有印象作者挂着谭浩强老师的名)。代码都不懂,指法也不会,就一个指头戳键盘,好几页的代码,学校机房一小时五元天价。最可气的是存盘的数据在下次上机时,会被管理员也不知用什么技术清空全部恢复原状。所以大一大二两年,我也没完成。想来就这样被机房“骗”了好多上机费。
实际真参与游戏编程的职业,当然是用现成的图形引擎写代码,没有题主说的丑不丑的问题,有也是怪美术那块的工作画得不好。但我是真心觉得做程序员呢,开心是最重要的。不一定就非得写点代码就想着是不是能向老板换钱(作曲的人应该也有写歌就为自己哼哼爽的用途吧)。我常给自己的父母写程序,更是写过定时(比如女方生日)在电脑桌面开放的玫瑰花(其实就一异形窗口再贴图)给女生。。。有孩子后,给孩子写小游戏(特别是益智类)是常事。下面有个宝岛保卫战我用C++加libsdl(纯C库)写的。我儿子两周岁不到就抢着拍空格键负责“无差别”发炮,那是一个老婆过来帮我拖工作室的地板的午后,阳光照进在地板投射出一块大光斑。我们都很开心。这游戏以及桌面开花的“求偶”程序代码,我都写进《白话C++》下册的“乐趣”章节。

C++加SDL写的射击小游戏,有声哦
https://www.zhihu.com/video/1060478525341044736
之前在别的帖子记得也发过这个录屏。今天觉得发这里也应景。程序员茶余饭后写个小游戏就为了自娱(包括家人)。也好看不了,但我平日里教人C++时,最反对学了一大本书,还只能在黑乎乎的控制台下写代码,因为学习这件事,一旦枯燥没有乐趣,就只有圣人能学好。
我用c++简单封装了下libsdl,回头放到github再来这里通知。大家也可到我的小网站(看我签名),到时在网站对代码做说明。用我封装好的代码,我感觉写个什么回合类啊,射击什么的游戏啊,都很简单,难就难在画图吧。上面游戏画面中的UFO,飞机,炮弹,鸭子,潜艇,小鱼,海星都是我用Windows自带画图程序画的,背景图用PowerPoint画,感觉比写代码还累人。
~~~~~~
顺便说下游戏剧情设定。游戏虽小,但背景气势一定要大,让玩家有置身于历史洪流而被命运选中的使命感……供大家开心: 大明时期,外星人入侵地球,幸得张三丰组织武林中人抵抗。击退大部分外星人。但外星人留了一手,在某宝岛海底深处埋下一核心能源,并留下一小部分外星人守卫。以待后续再次入侵时实现里应外合……未料时间一长,留守外星人被美丽的地球无形中感化,化身为鲸鱼改为帮助守护地球。又未料某岛国因核辐射,全岛居民变异为鸭子,竟然先行于外星人以鸭屎发起对宝岛的攻击(动机存疑),外星人为防止核心能量出异常,提前派出一UFO和大量飞机发起对地球的攻击,包括鸭子……场面错综复杂,谁胜谁负,是敌是友,蓝色星球是否能延续数十亿年的文明?历史选择了你……

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
发表于 2020-12-21 10:08 | 显示全部楼层
因为游戏开发不仅仅涉及到编程呀。这个问题约等于 为什么我用汉语写的小说不精彩…写小说精不精彩和用不用汉语关系不大and做游戏精致不精致和用不用C++也没太大关系。
发表于 2020-12-21 10:17 | 显示全部楼层
游戏画面主要靠两个部分:引擎技术和美术。我用画油画来做例子,引擎技术就像工具和原材料,美术就是油画艺术家的水平和审美了。要有一副好的油画,这两个都要很强,快速总结一句就是,没有好的艺术家再好的工具也没用,没有好的工具再好的艺术家也会受到限制,巧妇难为无米之炊。
引擎技术渲染部分,包含了好几大块,主要就是灯光,材质,特效,后期处理,等等。具体到详细的feature比如水的渲染,雾的渲染,全局光,体积光,软阴影,毛发的渲染,抗锯齿等等。这些技术很多块都是很复杂的,而且成熟的引擎都积累了很多年,迭代了很多次,基本可以做的又快又好,楼主自己用opengl/directx和c撸的话基本可以实现一个大概,但是复杂程度,优化程度和robust程度和这些引擎肯定差很远,这是时间人力物力注定的,我以前自己也实现过,从最简单的三角形到复杂的一些阴影特效等等,工作量巨大。
当你有了好的技术(油画的工具和原材料),决定画面的就是美术部分,这一部分可能也是楼主没有的。好的美术需要好的审美,好的设计,颜色,构图,灯光等等等等,这都是美术专业人员经过非常多训积累的,游戏里面的美术还包括2d一开始的设计和3d最后的实现,讲究非常多,可以这么说,一个不懂美术的人用虚幻4所有的功能特效全开,看起来画面并不比ps2时代的经典游戏好,这就是艺术家的作用了,因为就算你没有超强的图形技术,艺术家也可以靠自己的美术实力让游戏画面很好。
一个好的游戏画面是全组人配合的结果,程序,美术,技术美术,特效,全都发挥着重要的作用。
发表于 2020-12-21 10:23 | 显示全部楼层
我觉得这个问题挺好的,不只是开发游戏,新手做其他技术也会有这种困惑,只不过游戏更明显一些。
首先回答为什么游戏那么简陋:
1.工具不对(或者说不合适),费力不讨好
2.做的工作远远不够,游戏也是一个项目,在技术上也分为非常多的模块、你写的代码也远远不够
3.游戏是一个需要玩家与之交互的艺术品,所以少不了美术与音乐


然后谈谈为什么会有这种感受:
主要原因是新手在初学阶段知识体量不够。
一般来说,我们在开始学某个技术的时候都是从最简单的教程开始,这个阶段你只是在学习如何去“用”。比如,创建一个win控制台窗口并打印HelloWorld;同样的,也可以用Unity或者Unreal直接生成一个游戏demo,其实你做的工作在操作难度上并没有太大差异。之所以效果差别这么大,是因为你用的工具(或者框架)不同,他在背后帮你背负了相当大的工作
因为懂得少,所以很难理解类似“C++适合做游戏的原因”这种问题,不过现阶段也没必要去深究。你需要做的是选一本该方向的权威的书籍去看,同时找一个这个技术方向流行的工具去实验。


建议:
找本好书看,打好基础(如游戏引擎架构)
选个引擎,然后找个好的使用教程(Unity或者Unreal)
找个包含资源的Demo源码,下下来跑跑,看看人家项目里面都有什么


如果你的目的是做游戏,你就不要再用windows窗口去一点点的写了(如果是为了学DX、Windows应用另说)。直接换引擎去做,速度快、反馈又明显,还增加自信~


我有个游戏开发入门教程链接,我就厚脸皮的拿上来给你参考一下,看了你就会知道你还需要学哪些知识了~
游戏开发入门系列(目录) - Jerish的博客 - CSDN博客

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
发表于 2020-12-21 10:30 | 显示全部楼层
cpp自带的简陋界面…
所以说这是一个“文字”冒险游戏是吗?!

BTW如果不想专业弄这个,只是图好玩的话…
Qt is good

如果想认真一点…也许你可以试试GL?

只有真的勇士,敢于面对Windows绘制GUI的繁琐,敢于正视转到x11的各种不兼容…
发表于 2020-12-21 10:38 | 显示全部楼层
C++写游戏——从direct3D到direct2D到放弃


C++写游戏 从D3D8 到 D3D9 到 D3D10 到 D3D11 到D3D12到放弃
D3D12 下怎么载入纹理都花了老牛鼻子劲……还没弄对
发表于 2020-12-21 10:45 | 显示全部楼层
别人的游戏有很好的图片和音乐归根结底是别人有足够规模的团队协作,其中有大量的美术、音乐音效、关卡设计、数值策划、文案策划等等不同岗位的协作,程序对于游戏虽然是重要的但不是全部,从工作量上来说甚至未必是最大块的。
即使单说程序部分,足够大型的项目往往也有很多不同分工、使用不同语言的工程师进行协作,有的专门负责引擎底层的设计和调整,有的专门负责业务逻辑开发,有的专门负责工具的开发。在这其中,c++语言负责的往往是较为核心底层的,但却往往不是直接负责产出玩家可见的内容的。
打个比方,就好像拍一部电影,观众看到的部分是什么呢?是演员精湛的演技,是舞美绝伦的布景,是编剧绝妙的剧情,而程序负责的呢?是摄像,是场务,是对电影至关重要但是观众并不容易直接感受到的部分。最悲哀的是,观众什么时候会关注到你呢?当你很烂的时候。你不决定产品的上界,但你很容易确定产品的下界,你很少被夸,却常常被骂,这就是游戏程序的宿命。
是否可悲?不可悲,谁让咱们拿的薪水比他们高呢,谁让咱们换个领域也能一样干呢,技术工种注定不常站在舞台的聚光灯下。
以上是回答为什么,下面是怎么办
如果你能安于寂寞,享受钻研,数学和英语基础好,能够从自身的实力提升上获得享受,那么做个程序吧。记住,只有不断学习才是你生存的唯一法则,不论你站到多高,停止学习就是你走向被淘汰的开始。不必过于纠结学习的方法或者方向,持续不断的学习会提升学习本身的能力,知识的储备会结成一张网,托着你完成各种挑战。
如果程序只是你的手段,只是因为你听说做游戏需要程序才学,如果你热爱游戏,有满腔的想法,觉得自己迟早会站到聚光灯下,做出点与众不同的事情,那么你应该做的是抛弃底层和细节,直接从协作的顶层开始,尽可能攫取整个生态已有的成就,纳入自己的资源库,使用流行且生态丰富的引擎,购买或通过免费授权来使用各种资源,聚焦到产品本身而非技术的细节,当技术限制你的时候,或者绕道而行,或者找个协作者,不要浪费太多时间在钻研上,不论是员工,合伙人,顾问,兼职外包,能解决你的问题的就是好猫。
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-11-23 20:46 , Processed in 0.095445 second(s), 26 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表