Answers:
从某种意义上说,C ++确实被取代了-不仅被C#取代,而且被其他许多语言取代。但是,如果您要问,它将完全替换掉吗?那么答案肯定是“ 否”。
这是因为C ++传统上以两种方式使用。首先,创建游戏引擎:加载资源的低级组件,在物理模拟中将多边形推入屏幕并处理数字。其次,对游戏逻辑进行编码:制定游戏规则的实际规则。
第二种功能不需要C ++的强项(例如,对底层细节的完全控制),但是会受到其弱点(例如,易于出错的手工编码内存管理)的困扰。在第二种能力下,C ++被不同的脚本语言所取代。许多开发人员都使用Lua。有些使用Python。但是,如果可以使用.NET或Mono形式的CLI平台,那么它会提供出色的脚本宿主主机。这些平台非常快速,可靠,并提供了广泛使用的语言(C#)和全面的基类库。让我们不要忘记工具:MS Visual Studio和SharpDevelop / MonoDevelop可能不是世界上最好的IDE,但是它们相当不错。
也就是说,游戏引擎不会用C#(或Lua或Python)编写。为什么?因为它们不够快。
与许多流行的看法相反,当今最大的性能下降是由于内存延迟。这意味着访问内存是一项严肃的工作。而且托管语言不允许用户控制内存访问-这就是为什么首先对其进行“托管”的原因。因此,没有托管语言将允许编写真正快速的游戏引擎。实际上,我能想到的所有大型“ C#”引擎-XNA,MOGRE,Unity-都基于本机 C ++代码。但允许使用C#编写游戏逻辑。
综上所述:将使用C#代替C ++或其他语言。但是,它永远不会取代C ++,至少直到有人发明了无延迟的即时访问内存。
语言选择在很大程度上取决于平台。目前看来,除了Microsoft平台以外,几乎没有其他任何东西实际上需要.NET作为实现。
传统观点认为,小型平台需要靠近金属才能发挥作用,但另一方面,托管平台更安全。这可能是Windows Phone 7强制您使用.NET的原因。
如果新的Xbox需要托管平台,肯定会很有趣。如果电话的硬件可以处理(并且可以),我当然可以看到他们在完整尺寸的控制台上使用它。如果不使用脚本语言编写所有游戏代码,则编写跨平台游戏将更加困难,这将极大地激起控制台生态系统。如果真是这样,那么C#不会取代 C ++,但它会携手并进。
现在,您可以将Mono用作脚本后端(类似于Unity所做的事情),但是我可以想象,大多数引擎制造商要么想要自己动手,要么使用比C#更紧凑的东西(如Lua或Python)。
无论哪种方式,这都是关于正确工作的正确工具。实际上,无论如何,您都应该学习两种语言,因为C#使某些事情(工具开发,服务器开发等)变得更容易,并且在某些情况下您只能使用C ++。
不太可能。C ++的优点是级别较低,因此开发人员实际上可以调整最细微的细节以获得最佳性能。
使用C#和.NET,您有非常有用的垃圾回收,但是当使用内存和资源有限的平台(便携式控制台,在某种程度上是家用控制台)时,您需要对内存进行尽可能多的控制才能充分利用内存资源。允许托管语言为您分配和释放内存很可能会引起很多问题。
速度也是一个问题(尽管可能不是这样)。随着时间的流逝,我确信可以使托管语言的性能与C ++编译器相当。
总的来说,以我的经验来看,游戏开发人员在内存,CPU时间和资源(尽可能地提高性能)方面往往是控制怪胎,这就是为什么C / C ++是主要使用的语言的原因。
否。依靠.NET可能意味着需要对没有可用框架的平台(如PS3)进行大量重写,并且性能劣势在PC或Live Arcade游戏上可能是完全可以接受的,但是大型游戏将需要所有废品。从其控制台获得的性能足以足够快地运行。不仅如此,C ++中存在着庞大的现有代码库,即使他们愿意,也没有人能够负担得起升级。C ++属于游戏行业,它将长期存在。
在计算机能力匮乏的时代,所有事情都需要用C或C ++进行编程,这仅仅是因为垃圾收集的语言使内存控制权脱离了程序员,因此性能可能会下降。
如今,计算机的速度更快,但是正如Knuth所说的,简而言之,优化可能是邪恶的:
显然,底层的核心功能需要优化,因为计算3D几何,物理,碰撞,光照可以迅速使现有的最佳处理器膨胀。您可以很容易地看出,机器上视觉质量的提高几乎总是会严重影响性能。
现在,还有其他功能,例如游戏状态,AI,声音,输入,网络,这些功能在游戏中仍然很重要,但几乎不会占用太多计算机资源。大多数时候,这些功能不必进行优化。这就是脚本语言和垃圾收集语言的目标:您不必考虑内存一致性和应用程序组织,因为如果您不编写底层代码,则使用这些语言编写的代码将永远不会瓶颈。
2例
两者的距离均为500公里。
在这两种情况下,知道您不能使船或卡车移动得更快,使装/卸过程更快以缩短整个运输时间是否重要?
答案是:与卡车无关紧要,但与船无关,因为您已经通过与船一起移动库存进行了很多工作。
我不知道您是否理解这个隐喻,但是从某种意义上说,它可以让您想象数学问题,这比理解答案更重要。
如果您已经有使用C / C ++编程的引擎,则脚本语言可以使游戏更快:3D引擎解决了底层问题,现在您必须使用脚本来制作游戏。
但是请记住:您绝对永远无法替换低级编译语言EVER。静态类型的编译语言是性能的核心,您不能排除它们是内核,3D引擎还是图形卡驱动程序。
但是,当然,如果您的游戏在图形上很简单并且不需要大量的矢量计算,则您可以专注于游戏玩法而无需进行优化,因为在这种情况下,由于您的计算机运行速度非常快,因此您无需再进行优化为了那个原因
除非您计划在DS上端口ir。但是我会停在那里。
瞧,我知道这是种咆哮,但我不仅仅是在分裂头发。我觉得大多数程序员并没有真正把它们放在一起。语言本身与运行速度/性能无关。这是编译器/框架。您最好将gcc反对cl(2010年前的Microsoft编译器)或msbuild(2010的当前c ++编译器)。这些编译器的每个发行版都会变得更好,因此您还必须将它们与自身的早期版本进行比较。.net给我留下了很深刻的印象,它的性能很好,但是即使性能稍好一点,我也看不到它能取代它,原因之一是:可移植性。
AAA游戏想在Windows,Linux,Mac,XBox,PS3,Nintendo等平台上使用。