是否应该选择C#或C++来学习游戏编程(控制台)?

und*_*ack 36 c# c++

我在c和c ++中有基本的游戏编程知识.我现在正在学习c#.如果我想在控制台游戏编程方面做一个职业,我应该用哪一个继续?我注意到很多游戏公司都在使用C++/C(可能是因为传统原因).也许C++可以享受更多受支持的库?
在哪些语言中编写现代游戏引擎(虚幻/孤岛危机等)?
哪种语言更好?为什么?

Wil*_*ill 55

C++,有两个原因.

1)很多游戏都是用C++编写的.目前还没有主流游戏采用托管语言编程.

2)C++和它一样难.您必须掌握手动内存管理并且通常没有边界检查(超出优秀的Valgrind!).如果您掌握了C++,您会发现这可以转换为托管过程语言.相反,反之亦然.

C++的复杂程度接近APL!通过打弱对手你永远不会变得更好.

乔尔对此提出了非常强烈的观点.理解机器如何工作的人会让更好的程序员,因为所有的抽象都是漏洞.

  • @Jeff嗯,它可以使用python作为规则引擎.大多数游戏引擎都支持脚本引擎; 我认为Lua是最受欢迎的.但这并不意味着引擎本身是用脚本编写的. (13认同)
  • @dboarman:C++的表现不是C#的"假设".这是事实.托管代码的全部优点是您无需担心内存的分配方式.但是控制台游戏开发者*确实需要担心这一点.所以他们需要C++提供的那种控制. (10认同)
  • @Porculus:这不是事实.我已经在文件I/O领域进行了大量测试,我发现C#优于C++ AND C(使用C Std Lib).是的,有些领域的本机代码将超越,但MS正在优化其.NET操作系统,而不是原生API.您很快就会看到托管代码超过原生性能,因为原生性能现在停滞不前.不要忘记,JIT编译器可以执行本机编译器永远无法实现的优化... (8认同)
  • 关于你的第一点,Civilization IV是用Python编写的,这是一种托管语言. (7认同)
  • Pete:Crash Bandicoot(和Jak&Daxter)不是用LISP的托管版本编写的 - 它是一种自定义方言,没有垃圾收集和非常有限的动态内存分配.GOAL更像是装配,而不像Common LISP. (3认同)
  • 是的,(1)是关于就业市场,(2)是关于学习; 他们之间没有太多的支持,所以有两个不同的点 (2认同)
  • XNA运行xbox360,pc和AND zune.还有,单声道和统一.所以,除非你打算写一个相当性能密集的游戏,你可以去c#路线. (2认同)
  • @Porculus:我想这就是.Net和XNA如此受欢迎的原因.因为我们不担心内存分配,所以我们花在调试和优化上的时间更少 - 并且生成时间更长.;) (2认同)
  • 这太疯狂了.有一些令人兴奋的游戏是用托管语言编写的.实际繁重的代码块,比如说DirectX,如果它们今天从头开始编写,将用托管语言编写,但是,这种代码大概不太可能.从技术*的角度来看,关于C#比C++更好的讨论是我在我的问题中避免回答的问题,因为*学习*和*就业能力*方面是主导的. (2认同)

zac*_*fix 37

好的,这是我的两分钱.

如果您打算认真进入游戏行业,我建议您学习这两种语言.从C++开始,然后进入像C#这样的托管语言.C++具有优于C#的优势,但C#也优于C++.

我个人更喜欢C#而不是C++.这是因为很多原因:只有几个:

  1. C#让编程再次变得有趣;).
  2. 它的托管代码可以帮助我轻松完成复杂的任务,而不是忘记安全性.
  3. C#s'是纯OOP,强制代码中的规则有助于保持代码更易读,"可维护"并且执行更稳定.生产率超过C++至少10%,最好的C++程序员可能是一个更好的C#程序员.
  4. 这不是一个真正的原因,更像是'我'喜欢C#:LINQ.

现在......我想念C++有很多东西.我想念能够(完全)管理自己的记忆.我无法告诉你有多少次我试图"删除"一个实例/参考.我不喜欢C#的另一件事是无法使用多重继承,但它又迫使我更多地考虑如何构造我的代码.

关于这一主题的讨论比已知宇宙中的恒星更多,而且它们都处于死胡同.这两种语言都不比另一种语言好,而且从长远来看,拒绝任何一种语言都会伤害到你.时代在变,计算机编程的标准也在变化.

无论您选择保留在列表顶部的任何语言,始终保持您的选项开放,不要将您的想法放在任何一种语言上.你说你已经了解C++,为什么不学习C#,它不会受到伤害,我'保证'你,它会让你成为一个更好的C++程序员.

  • C#当然是多范式的. (2认同)
  • 赞成,但是你的第3点很有争议,几乎是错误的。C# 远非“纯粹的 OOP”。当谈到编程范例时,最好避免谈论“纯粹性”。宗教人士总是会有所不同。例如,我。 (2认同)

kyo*_*ryu 26

这取决于

这取决于很多事情 - 你的目标,经验,你的时间表等.

大多数游戏编程都不是特定于语言的.3D数学是C#中的3D数学,就像在C++中一样.虽然API可能不同,并且可能需要不同的"簿记",但基本逻辑和数学将保持不变.

确实,大多数AAA游戏引擎都是C++,并且在它们之上使用脚本语言.这是不可否认的.但是,大多数AAA引擎也有一堆内部工具支持它们,而那些可能是任何东西 - Java,C#,C++等.

如果你想写一个游戏,并且是一个经验丰富的开发人员,那么C++和C#对他们有很大帮助.C#有较少的内务管理,而C++有更多可用的库和工具.但是,对于任何非常复杂的事物,您最好尝试使用现有的引擎作为起点.

如果你想写一个游戏,并且是一个新的开发者,那么就不要编写引擎.使用现有的引擎,并对其进行修改或使用其设施来编写游戏.相信我.

如果你想学习如何编写引擎,并且是一位经验丰富的开发人员,你应该考虑C++.C#也是可能的,但C++的代码量和易于集成可能会使它超越顶级.

如果你想学习如何编写引擎,并且是一个新的开发人员,我可能会推荐C#/ XNA.你可以更快地获得游戏"东西",而不必担心学习C++的来龙去脉.

如果你想要一个行业的工作,那么你需要弄清楚你想要什么样的工作.高级语言可以帮助您轻松应对工具和/或Web开发,这可能会带来实际游戏工作的机会.如果您想要获得更多游戏设计师/脚本编写者的位置,即使是脚本语言知识也可以提供帮助.有可能你不会立即找到核心引擎工作的工作,因为这样做的技能非常高.强大的C++开发技能总是有用的,特别是在实时或网络方案中.

AAA游戏引擎开发涉及一些严重的大脑扭曲代码.

如果你想创建一个专业的开发公司,那么你可能不会读这个,但已经知道C++可能是唯一可行的答案.

如果你想做休闲游戏开发,那么你应该考虑Flash或类似的技术.


小智 13

我不打算回答原来的问题,因为这里的帖子很多.我要指出你在帖子中错过了什么.简单地了解C\C++\C#并不会让你在游戏开发方面获得成功.大多数游戏工作室都可以获得数十到数百个应用程序来完成简单的代码猴作业 与他们相比,是什么让你脱颖而出?是什么让你比其他在其他工作室制作游戏经验的人更好?

如果你真的想要在游戏行业的职业生涯,即使是在游戏机上,你也应该做一些展示你所知道的演示.如果您正在申请控制台开发职位,C++将是在演示中使用的出色语言选择.您可以通过在C#\ XNA中创建工具来为演示创建资产来展示更多内容.您将向招聘经理和技术主管展示您不仅仅是C++人员或只是C#人:您是开发人员.


小智 10

没有一种语言是"更好的赌注".使用最适合您需要的语言,无论是游戏编程还是任何其他域.C++不会很快消失.

如果您不是在开发Microsoft平台,我怀疑您是否会使用C#.

  • 精细.**所有游戏都应该用C++编写**...那里.那是我们要找的吗?保持即将到来的投票. (5认同)
  • 虽然我讨厌进入语言大战,但毫无疑问某些语言对于某些应用程序来说更好或更差.对于游戏编程,我愿意说C++和C#都是比COBOL更好的赌注,目前我认为C++比C#更好. (4认同)
  • @STingRaySC:如果没有什么语言比其他语言更好,让我们改变它:所有游戏都应该用 COBOL 编写。那应该得到一些反对票。 (2认同)

Pau*_*han 6

C++.

它是AAA游戏编程的黄金标准.如果你需要做一些有趣的事情,你需要做C++或深入研究非托管C#(并不总是很好).

C++也可以说更快(通常的警告适用).

作为一种学习经历,C#不值得.C++无疑更好,特别是在准嵌入式游戏机世界中.要获得面向对象的体验,请转向Java.

  • 当然,C++远远优于两者. (2认同)

IAb*_*act 5

说实话......你必须决定哪种语言更好.我知道我能用C#做些什么.我知道在C++中可以做些什么.C#并不是为了做C++的目的而做的......在最基本的层面编写代码,在人眼阅读时仍然有点意义.

我们正在开发一款带有C#,DirectX的游戏引擎......这是一个挑战吗?地狱耶...但这是我们选择做的事情.我们正在研究一些非常接近C++可以提供的性能水平.所以,我认为这项工作没有任何问题.

对于跨平台开发,如果不是.Net,我们可能没有Mono平台.Mono平台拓宽了我们的平台基础.

这是对我的论点的一些支持 ......