游戏编程:C#还是C ++?[关闭]


15

我已经决定我真正想要做的是游戏编程。因此,问题是,作为一个想学习自学编程的18岁孩子,C#和C ++之间最适合的编程语言是什么?(我应该声明我不关心Unix,因为我相信Windows仍将是使用最多的OS)

我知道C ++的基础知识,但不了解C#。我知道C ++有更多的教程指南,dll和类似的东西,而C#则没有,但是学习和使用一个人来开发程序要容易得多,但是即使程序被混淆,我也已经读过很容易找到它的来源。

好吧,我有点想先关注基础知识,我必须说我偏爱C ++,只是因为它对我来说更合适,但我必须考虑我一个人工作。因此,即使我喜欢它,也不是最好的选择。

我真的不确定要去哪一个,我已经在各种网站上阅读了很多线程,而且看来C#比C ++越来越流行。但是,是的,我也指定我要进行游戏编程。因此,我需要知道一些不仅是“由于C.没有C ++,因为.net内存处理而使C#更容易”的更好的要点,因为我无法找到它。


16
您可能还会发现gamedev.stackexchange.com很有帮助。
亚当李尔


2
另请参见:gamedev.net
Patrick Hughes

Answers:


21

我通过编程游戏学习C ++。那是一次非常愉快的经历。我强烈建议您也这样做!

但是现在我是C#程序员,我知道如果那时C#可用的话,我的工作效率就会大大提高。

C#是学习游戏开发的理想选择。它具有从框架到书籍开始所需的一切,并且语言很棒。

我已经看过数十本专门针对C#游戏编程编写的书,而Microsoft正在为改善他的框架(包括DirectXXNA)付出很多努力。

UPDATE:你可能有兴趣利用也。这是Miguel de Icaza的最新博客文章。

2013年2月22日更新微软计划停止对XNA的支持


1
因此,也许我应该开始使用C ++解决SDL或类似的问题,然后再将来使用C#。看起来好像C ++有点被C#取代,除了引擎的创建。.为什么这么难选择呢? !
Chronix 2011年

2
了解C#非常适合体验游戏开发,而不是某些游戏平台或其他方面的可移植性。最好的情况是,当您同时了解足够的游戏开发者并且根据目标平台选择C ++或C#时。
克莱姆2011年

除此之外,显然是+1。我个人仍然更喜欢C ++,但这仅是因为出于某些特定于项目的原因,我的大多数项目都需要一些低级访问权限。
克莱姆2011年

12

大多数游戏公司都使用C ++,也许在后台运行python脚本或其他语言。此外,由于OpenGL和DirectX的绑定是针对C ++的(我非常确定您可以在C#中完成Direct3d的工作),但是对于游戏编程而言,C ++是主要的语言。

我会给您一个合理的警告(但不要阻止您),但是3D图形会变得极其复杂。新的Direct3D使它比以前更容易使用,但是它仍然是相当多的数学运算(可能会引起很大的混淆),而库本身可能会造成混淆。

首先,我将从非常简单的内容开始。对于2D东西一旦进入3D,SDL(简单Directmedia层)就很容易使用(对于自上而下的游戏而言),我个人认为OpenGL更容易学习(但这是所有观点)。MS在DirectX SDK文档中有一些不错的教程/示例,因此值得一看。Nehe教程虽然有些过时,但仍然不错。

但是,要回答您的问题,它们通常都是用C ++完成的。


1
SlimDX为.NET提供DirectX包装器
Danny Varod 2011年

1
“对于游戏编程,C ++是主要语言。” 我不同意那句话。游戏市场比AAA主机游戏要广阔得多-这个市场比人们通常意识到的要小得多。我想说用ActionScript等语言编写的游戏比C ++要
多得多

8

首先,您需要设置一些优先级。您是否只想先制作游戏,然后再学习编程的更高级方面,反之亦然。两种方法各有利弊,但在我看来都是合法的。

如果您想开始制作游戏,那么我建议您学习C#。如果您已经了解C ++的基础知识,那么选择C#完全没有问题。使C#成为您的工具具有优势。它是一种易于学习的语言(与C ++相比),是一种“托管语言”,这意味着它会自动为您执行内存检查(很多C ++初学者,甚至不是初学者,都会遇到麻烦) )。它还使您可以访问Microsoft的XNA Framework,它可以为您完成更多繁琐的工作。这样您就可以专注于诸如游戏周期和设计之类的事情,而不必担心(太多)使其工作。没错,所有这些繁琐的工作都有其开销,这意味着您可能不会制作行业级的3D游戏,但您只是在进行游戏编程,因此,我怀疑您是否会在首次尝试时制作下一个Halo。:)

这是开发成功的XNA游戏(精选武器)的家伙的事后总结。他详细介绍了如何使用C#/ XNA节省了开发时间,而不必使用C ++。 http://www.gamasutra.com/view/feature/3899/postmortem_mommys_best_games_.php

话虽这么说,您应该花一些时间至少了解背景如何运作。C ++程序员将如何做到这一点。如果您想要在游戏行业中立足,学习用C ++制作游戏可能会使加入另一个游戏开发团队(因为他们大多数都在C ++中工作)变得更容易。但是,即使您最终从未使用过C ++,无论您使用哪种语言,了解内部工作原理都只能使您成为更好的程序员。


我完全同意。c ++所面临的内存管理问题是最大的问题。我没有开发过一款没有记忆问题的游戏,而且我听说过20年的资深人士说过同样的话,他们制作了数十款游戏。甚至RAII和智能指针也无法解决问题,因为您会遇到指向旧数据的指针问题以及所有权问题。学习如何查找和修复它们将使您成为一个更好的程序员,但是第一次缓冲区溢出和与游戏无关的部分崩溃可能会使您陷入困境。
Dominique McDonnell'3

我想补充一下这个问题,C#还具有XNA(en.wikipedia.org/wiki/Microsoft_XNA)的优势。XNA是容易比非托管的DirectX回暖。
Vitor Py

1
@DominicMcDonnell:您也可以通过将引用保留在托管运行时(例如C#)中某个地方的隐藏位置来解决内存问题,当它命中时,您将很难找到它,因为您将不习惯于思考资源生存期。
2013年

@JanHudec,我不知道。我想您可以说使事情顺利进行变得容易和容易,但是要弄清问题的难度要大得多,并且从某种程度上讲,语言允许您建立的习惯会妨碍您的发展。
Dominique McDonnell

3

我大力推广C ++用于游戏开发。有一些额外的障碍,各有利弊,最好的原因之一是可移植性。

如今,使用C#,您可以进行更多的开发工作,并且肯定可以在其中编写一些令人惊讶的出色引擎。这两种都是用于游戏编程的好语言,如果您仅针对Windows / Xbox平台,那么您特别有理由倾向于C#。

我最认为您应该学习的语言是OpenCL或CUDA,这是一些GPGPU语言。就我个人而言,我更喜欢OpenCL,因为它似乎可以持久并进一步发展,它基本上只是C风格。有OpenTK这是无论是C ++或C#一个漂亮的包装。

我一直想知道硬件加速对Ruby游戏编程的影响如何...


3

原始的游戏编程会让您感到不寒而栗。在C#或C ++中使用低级图形调用是一个小噩梦,您真的不想重建渲染2D精灵的轮子,更不用说3D模型了。由于您是一个人并且想学习编程,所以最好的选择是找到一个可以使您有所发展的框架。

由于您对基于C的语言有所了解,所以我的建议是让Unity 3D外观一新。它不仅受到商业游戏开发商店的广泛采用,并且具有一些有趣的平台选项(包括PC,Android,iPhone和Web运行时),而且还具有易于使用的免费版本和大量教程。向您展示如何从概念过渡到实施。最好的(IMO)受支持的脚本语言之一是C#。


2

两年前,我为一个班级制作了一个游戏(当时我也才18岁),我们用C#编写了游戏。虽然我观察到大型C#程序通常比大型C ++程序运行慢,但C#所需的工作量也要少得多。内存管理是自动完成的,对于第一个游戏而言,它足够快。(我们的游戏是功能完善的2D多人游戏,类似于Starcraft的RTS。)

我会扎根C#,因为它应该更易于管理。但是,如果您想成为专业的游戏开发人员,请记住它仅适用于Microsoft平台。(不过,C#可能是C ++的一个很好的垫脚石,如果我不得不重新学习这两种语言,那么我将首先尝试学习C#。)


C#的确也可以在Mono(跨平台)上运行,但是不支持框架的某些部分(例如WPF)。
Danny Varod 2011年

1
@Danny Varod,我真的不建议在跨平台游戏开发中推荐Mono,因为到目前为止,在功能方面它们一直比Microsoft晚一些,并且我不希望它会改变。此外,XNA是使用C#开发用于Microsoft平台的一个主要优点,而在Mono还提供DirectX之前,它不能在非MS平台上运行。
zneak 2011年

1
正如您所说的那样,Mono必须提供一个兼容的OpenGL包装器,因为DirectX是Microsoft的。我的观点只是C#可以部分移植。
Danny Varod 2011年

2
在Unity,monogame(用于mono的开源XNA)和OpenTK之间,有很多不错的Mono游戏库。
stonemetal 2012年

1

我之所以投票支持C ++-主要是因为它可以跨平台(当然,这取决于您编写代码的方式),并且因为我认为它可以为您提供有关内存管理的更多知识-因为您需要关心它。但是,由于您不关心linux / unix,因此,如果暂时不要考虑内存复杂性,为什么不现在就专注于C#,然后再学习C ++呢?


感谢您回答有关Stack Exchange编程器的第一个问题。
DeveloperDon

C ++至今仍是最可移植的语言。尤其是移动平台,有些具有Java,有些具有C#,但大多数都没有。但是所有人都必须拥有C ++。虚拟机需要以可编译为本机代码的方式实现,并且目前始终使用C ++来实现。
Jan Hudec
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.