用于制作游戏引擎的 C# 或 C++(深入)
C# or C++ for making a game engine (in depth)
什么是制作游戏引擎的最佳 C# 或 C++。我目前是一名 .NET C# 开发人员,并且非常想使用 C#。虽然我知道 C++ 确实支持内存管理,这就是为什么很多大公司都支持它的原因。话虽这么说,C# 在开发过程中速度更快,而且我非常熟悉。在有人提出建议之前,是的,我已经使用了团结。我喜欢它,但想要经历漫长而艰苦的额外尝试,以拥有 100% 自己制作的游戏。
不使用 C++ 我会失去什么?我使用什么样的库来处理图形和其他东西?这就是 DirectX 的用途吗?我正在努力解决这个问题,我们将不胜感激。
在学习 C++ 的同时用 C++ 创建游戏引擎是一个很大的挑战。
C#比C++好玩
为什么?
- 在C++中,指针很强大,你需要知道指针的工作原理和使用方法
- 在 C++ 中,查找库并不像拉一个 nuget 包那么容易
- 在 C++ 中,creating/refactoring 头文件和源文件很烦人
- 在 C++ 中,需要为每个 CPU 架构编译
- 在 C++ 中,开始时语法可能更难掌握
- 在 C++ 中,使用编译器并对其进行优化本身就是一个话题
但是如果您希望 game/game 引擎更快,那么您应该选择 C++
当我看到人们用 C++ 编写游戏代码时,他们主要使用 OpenGL,但这是一个常见的错误,因为大多数非控制台游戏玩家都是 Windows 用户。
我的建议是首先开始使用 DirectX 创建一个小游戏,如果你觉得舒服,然后下一步并创建你自己的游戏引擎
I need some opinions
也许我不应该冒昧地告诉你你需要什么,但我认为你最好接收你需要形成自己意见的信息。在我看来,在这里询问自以为是的答案(注意讽刺)在这里通常是不可取的。
C# 和 C++ 都是非常强大的通用编程语言。任何一种语言都 100% 能够创建成熟的高性能游戏。话虽如此,人们可以指出一些(大部分)objective 差异可能会影响您的决定。
- 垃圾收集
这对您是有利还是不利,由您决定。有些人想节省自己的工作,而不得不花很少的时间来照顾记忆。显然 C# 在这方面大放异彩。如果您当然知道如何正确使用智能指针,C++ 可以拥有优雅而简单的内存管理,但这仍然比垃圾收集更费力。如果您非常关心对资源的严格控制,那么 C++ 可能更适合您。
- 图书馆
当您想在不重新发明轮子的情况下编写软件(您应该这样做)时,语言的库可能与语言本身一样重要。这对任何一种语言来说都不是一个明显的优点,因为它们都有很多支持游戏的库。不过,如果你必须选出一个赢家,我会说它可能是 C++。多年来,该语言基本上已成为游戏程序员的通用语言,并且在该领域已经 非常 成熟。 C++ 可以直接利用低至 OpenGL 和高至 Ogre3D 的 APIs。但是,不能保证您的游戏实际上会受益于 C++ 库而不是 C# 库。这取决于您的用例。
- 标准库
继续库的主题,这可能是 C# 的专家。 C 和 C++ 是两种具有大量可用库的语言。如果你只计算他们的标准库,那么事情就会改变。有些人不介意,甚至喜欢这样。然而,人们可能还需要一组更广泛的标准功能。 C++ 无论如何都没有一个小的或无能力的标准库,但 C# 的功能肯定更丰富。
- 平台
除非您要使用 Mono,否则 C# 不可移植。 Mono 是一个很好的选择,但它也有缺点(你必须自己研究)。 C++ 不能像 "Build once, run anywhere" 那样拖行,但如果您想要的话,它仍然提供了非常好的可移植性。使用 OpenGL 渲染器(或一些更高级别的包装器 API,如 SDL/SFML),您几乎可以为任何桌面环境构建。如果您只是担心为 Microsoft 平台制作游戏,那么这一点可能是无稽之谈。
- 虚拟机或本机
这就像垃圾回收只是一个需要考虑的因素。由您决定它是否适合您使用。由于所谓的性能问题,VM 有时在游戏程序员中似乎是一种耻辱。的确,如果巧妙地使用 C++,它可能会是一款性能更好的游戏。然而,C# 的性能并不值得一笑。今天编写的许多游戏都可以使用 C# 实现正常运行。如果意味着 450 FPS 与 400 FPS,那么使用 C++ 真的有优势吗?当然,存在可衡量的差异,但这对玩您游戏的任何人来说意义不大,即使他们拥有 144hz 显示器。内存开销是在一个类似的船上。通常 C++ 实际上 不是必须的 直到你开始进入真正的重量级游戏。
- 学习
最后但并非最不重要的一点是,考虑一下您拥有知道的工具和不知道的工具这一事实。你已经知道 C#,如果你选择放弃 C++,你必须投入学习的时间可能会少得多。与 C# 和 Java 等语言相比,C++ 只是具有额外的概念和责任。其中一些您可以选择忽略。 C++ 不会拿枪指着你并强迫你使用多重继承,嘿,这可能很容易被放弃。你会放弃析构函数吗?这些很重要。一般而言,STL 怎么样?放弃它可能不是一个好主意,如果你打算使用 C++,最好不要学习 STL。如果你认为这是值得做的,那么一定要去做。不过,这只是需要权衡的事情。
什么是制作游戏引擎的最佳 C# 或 C++。我目前是一名 .NET C# 开发人员,并且非常想使用 C#。虽然我知道 C++ 确实支持内存管理,这就是为什么很多大公司都支持它的原因。话虽这么说,C# 在开发过程中速度更快,而且我非常熟悉。在有人提出建议之前,是的,我已经使用了团结。我喜欢它,但想要经历漫长而艰苦的额外尝试,以拥有 100% 自己制作的游戏。
不使用 C++ 我会失去什么?我使用什么样的库来处理图形和其他东西?这就是 DirectX 的用途吗?我正在努力解决这个问题,我们将不胜感激。
在学习 C++ 的同时用 C++ 创建游戏引擎是一个很大的挑战。 C#比C++好玩
为什么?
- 在C++中,指针很强大,你需要知道指针的工作原理和使用方法
- 在 C++ 中,查找库并不像拉一个 nuget 包那么容易
- 在 C++ 中,creating/refactoring 头文件和源文件很烦人
- 在 C++ 中,需要为每个 CPU 架构编译
- 在 C++ 中,开始时语法可能更难掌握
- 在 C++ 中,使用编译器并对其进行优化本身就是一个话题
但是如果您希望 game/game 引擎更快,那么您应该选择 C++
当我看到人们用 C++ 编写游戏代码时,他们主要使用 OpenGL,但这是一个常见的错误,因为大多数非控制台游戏玩家都是 Windows 用户。 我的建议是首先开始使用 DirectX 创建一个小游戏,如果你觉得舒服,然后下一步并创建你自己的游戏引擎
I need some opinions
也许我不应该冒昧地告诉你你需要什么,但我认为你最好接收你需要形成自己意见的信息。在我看来,在这里询问自以为是的答案(注意讽刺)在这里通常是不可取的。
C# 和 C++ 都是非常强大的通用编程语言。任何一种语言都 100% 能够创建成熟的高性能游戏。话虽如此,人们可以指出一些(大部分)objective 差异可能会影响您的决定。
- 垃圾收集
这对您是有利还是不利,由您决定。有些人想节省自己的工作,而不得不花很少的时间来照顾记忆。显然 C# 在这方面大放异彩。如果您当然知道如何正确使用智能指针,C++ 可以拥有优雅而简单的内存管理,但这仍然比垃圾收集更费力。如果您非常关心对资源的严格控制,那么 C++ 可能更适合您。
- 图书馆
当您想在不重新发明轮子的情况下编写软件(您应该这样做)时,语言的库可能与语言本身一样重要。这对任何一种语言来说都不是一个明显的优点,因为它们都有很多支持游戏的库。不过,如果你必须选出一个赢家,我会说它可能是 C++。多年来,该语言基本上已成为游戏程序员的通用语言,并且在该领域已经 非常 成熟。 C++ 可以直接利用低至 OpenGL 和高至 Ogre3D 的 APIs。但是,不能保证您的游戏实际上会受益于 C++ 库而不是 C# 库。这取决于您的用例。
- 标准库
继续库的主题,这可能是 C# 的专家。 C 和 C++ 是两种具有大量可用库的语言。如果你只计算他们的标准库,那么事情就会改变。有些人不介意,甚至喜欢这样。然而,人们可能还需要一组更广泛的标准功能。 C++ 无论如何都没有一个小的或无能力的标准库,但 C# 的功能肯定更丰富。
- 平台
除非您要使用 Mono,否则 C# 不可移植。 Mono 是一个很好的选择,但它也有缺点(你必须自己研究)。 C++ 不能像 "Build once, run anywhere" 那样拖行,但如果您想要的话,它仍然提供了非常好的可移植性。使用 OpenGL 渲染器(或一些更高级别的包装器 API,如 SDL/SFML),您几乎可以为任何桌面环境构建。如果您只是担心为 Microsoft 平台制作游戏,那么这一点可能是无稽之谈。
- 虚拟机或本机
这就像垃圾回收只是一个需要考虑的因素。由您决定它是否适合您使用。由于所谓的性能问题,VM 有时在游戏程序员中似乎是一种耻辱。的确,如果巧妙地使用 C++,它可能会是一款性能更好的游戏。然而,C# 的性能并不值得一笑。今天编写的许多游戏都可以使用 C# 实现正常运行。如果意味着 450 FPS 与 400 FPS,那么使用 C++ 真的有优势吗?当然,存在可衡量的差异,但这对玩您游戏的任何人来说意义不大,即使他们拥有 144hz 显示器。内存开销是在一个类似的船上。通常 C++ 实际上 不是必须的 直到你开始进入真正的重量级游戏。
- 学习
最后但并非最不重要的一点是,考虑一下您拥有知道的工具和不知道的工具这一事实。你已经知道 C#,如果你选择放弃 C++,你必须投入学习的时间可能会少得多。与 C# 和 Java 等语言相比,C++ 只是具有额外的概念和责任。其中一些您可以选择忽略。 C++ 不会拿枪指着你并强迫你使用多重继承,嘿,这可能很容易被放弃。你会放弃析构函数吗?这些很重要。一般而言,STL 怎么样?放弃它可能不是一个好主意,如果你打算使用 C++,最好不要学习 STL。如果你认为这是值得做的,那么一定要去做。不过,这只是需要权衡的事情。