代码之家  ›  专栏  ›  技术社区  ›  oopbase Jayachandran Murugesh

为什么c++在游戏开发方面如此强大[[关闭]

c++
  •  17
  • oopbase Jayachandran Murugesh  · 技术社区  · 16 年前

    我只是想知道为什么c++对于开发游戏来说如此强大和高性能。我用c#和delphi写了很多游戏,总是用定时器组件让对象“移动”。运动的另一个选择是循环,但它们肯定没有表现出来。

    那么c++使用什么技术来开发高性能的游戏呢?

    16 回复  |  直到 16 年前
        1
  •  29
  •   Kenoyer130    16 年前

    C++给了你对实际硬件和比特推送的更精细的控制。对于常见的业务需求,第三代语言如Java或C#编程速度更快,并且可以消除开发人员的指针和垃圾回收等顾虑。这是以缺乏优化和微调内存和数据结构使用方式的能力为代价的。

    你也可以采用一种混合的方法,将游戏分解成更高级的脚本语言,然后将“下拉”到C++的地盘中,以获得需要速度和优化的部分。

        2
  •  14
  •   GalacticCowboy    16 年前

    这在很大程度上是基于两件事:

    • 历史
    • 当前框架

    多年来,C++是任何类型的高性能应用程序的唯一选择,包括游戏。结果,游戏引擎和库中也有大量的投资,这些代码也是用C++编写的。

    即使在今天,大多数游戏框架都是用C++编写的。XNA确实允许C++,但即使微软也将C++作为他们的语言。

    *是的,这是主观的。。。

        3
  •  13
  •   utnapistim    16 年前

    C++优于其他语言的优点(主观程度)不在所使用的技术中。

    它是几个因素的组合,使得它既有足够低的层次,也有足够高的层次来满足需要:

    • 它是确定性的(您可以确定什么时候执行)。这对于垃圾收集的语言是不正确的,对于在虚拟机中运行的语言也是不正确的。

    • 它提供了高性能(您可以获得类似于C的性能,如果您愿意,甚至可以插入一些汇编代码)。

    • 它提供了比其他快速语言(例如C)更高级别的足够抽象。

        4
  •  5
  •   Paul Nathan    16 年前

    C++具有效率和抽象的结合,使它成为 对于需要有效响应的大型系统来说,这是唯一可行的选择[1]。

    此外,它还拥有一个在编写游戏方面经验丰富的大型社区以及众多框架的优势。

    就我个人而言,我用过其他语言写的游戏,他们也用过 一贯地

    [1] Ada或Delphi也可以在这个领域使用,但它们的流行程度意味着除非你有特殊的需求,否则选择它们就不那么务实了。

        5
  •  3
  •   Jack Marchetti    16 年前

    从我一直以来的理解来看,这条规则也适用于体育运动。

    Speed kills.
    

    都是关于速度。

        6
  •  3
  •   Ioan Paul Pirau    16 年前

    有一个 固体代码基 对于游戏,它主要是在C++中。

    另一方面,办公/业务应用程序只需要更快的开发周期、稳定性和尽可能的可扩展性。

        7
  •  2
  •   wheaties    16 年前

        8
  •  2
  •   Ivo Wetzel    16 年前

    这里有很多原因。


    1. 有人真的认为索尼会在他们的游戏机中使用C#?任天堂会在Wii2上部署JVM吗?

      不。

      因此C++是这里的明显选择,因为只需要编译器来构建适当的体系结构。

    2. 性能

    3. 开发时间
      在所有可授权的引擎出现之前,曾经有一段时间,第一代软件的开发花费了非常长的时间,只是因为你必须在新平台上为你的游戏编写一个全新的引擎,这需要时间。考虑到一款大型游戏的开发已经需要数年的时间,这需要大量的资金。因此,获取现有代码并为下一代“升级”它总是比较容易的。随着时间的推移,你会逐渐改善它。考虑到这一点,很容易看出,没有一个控制台制造商希望通过将控制台切换到与C/C++不同的东西来让开发人员面临更长的开发时间。

        9
  •  1
  •   rodrigob    16 年前

    没有什么能阻止你使用定时器来编写你的c++游戏。

    可以查看C++ Boost线程::睡眠方法来做到这一点。

    http://www.boost.org/doc/libs/1_38_0/doc/html/thread/thread_management.html#thread.thread_management.thread.sleep

        10
  •  1
  •   Artyom    16 年前

    • 高抽象层次——精细的面向对象编程和泛型编程

    因此,你不仅可以在游戏开发中找到C++,而且在许多其他领域都需要从你最好的性能、最低的资源使用率和良好的优化能力,比如数据库、系统编程和许多其他领域。

        11
  •  1
  •   Kylotan    16 年前

    C++对大多数其他高级语言的唯一技术是“你不为你不使用的东西付费”。这种语言没有垃圾收集、引用计数、同步、反射、内省、边界检查、运行时类型检查、元类等幕后特性,每种特性都会给一般操作带来成本。

    当然,这些特性中的大多数都是非常有用的,所以在C++中,你必须花费更多的编码时间来获得相同的结果。不管付出的努力是否值得,归根结底还是要处理多少遗留代码。

        12
  •  1
  •   darklon    12 年前

    其他一些我认为没有提到的方面:

    • C++不使用垃圾收集(不像C语言)——如果游戏暂时停止垃圾收集,那可能是不幸的。对于打算以每秒30或60帧的速度运行的控制台游戏来说,这可能是个问题。
    • 游戏开发人员经常花时间优化代码。正确的工具是用C++来实现的。大多数编译器都支持内部函数,所以可以直接使用SSE指令。游戏程序员经常做的另一件事是检查生成的程序集,并相应地调整C代码,例如消除动态分支。避免使用虚拟函数也可以带来速度上的好处(例如,许多其他语言只有具有动态多态性的方法——以及相关的性能代价)。
    • 事实上,从许多游戏开发者的角度来看,它比C#或Java更具跨平台性。你能在PS3上运行Java或C吗(编辑:Mono至少被一个流行的跨平台游戏引擎使用,因此C#是可能的,但是如果不使用该引擎,合并Mono可能仍然是一个障碍)
        13
  •  0
  •   Simon    16 年前

    C++在游戏开发方面的优势在于能够精确布局软件使用的数据结构。当高性能实时系统(如游戏)开始发展时,它是最受支持和最发达的编程语言。因此,对于那些试图将平台推向极限的游戏来说,这是一个自然的选择。从长远来看,这使得大多数开发人员即使需要或不需要,也会同意这种选择。

    C++提供了重写诸如内存分配等重要性能瓶颈的能力。它有能力在记忆中准确地组织和放置事物。最重要的是,它是一种灵活的编程语言,提供了良好的开发速度。

        14
  •  0
  •   Dan Bryant    16 年前

    另一个值得注意的趋势是,现在很多游戏都使用脚本语言(如Python或Lua)来控制大部分游戏逻辑。这给您的内容开发者和调制解调器提供了丰富的行为,而不必在C++或构建中进行编码。脚本不是超高性能的,但它非常方便,而且现代PC有足够的马力来处理脚本。

        15
  •  0
  •   Daniel Little    16 年前

    我想指出一些人们缺少的东西。首先,C++在业界具有优势,因为大多数工作室都有一个现有的代码C++ 3D引擎。第二,他们建造了它或者已经用了很多年了。只有这两点,才有理由和C++保持联系。第三,本地C++总是比托管语言稍微快一些,因为它没有开销。好吧,管理好了。

    现在请注意,无论这是现有的游戏工作室,独立场景是有点不同,我认为这里是XNA实际上正在加快速度。首先,它允许您访问三种设备(pc、xbox、基于zune的),这甚至不包括MonoXNA。在这个水平上,速度的差异几乎不值得担心,而且效率更高。

    我希望我给你一些考虑。

        16
  •  -3
  •   Derik    8 年前

    1000美元以下的有多少?