Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/261.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 游戏引擎开发问题_C#_C++_Performance_Opengl - Fatal编程技术网

C# 游戏引擎开发问题

C# 游戏引擎开发问题,c#,c++,performance,opengl,C#,C++,Performance,Opengl,我正在考虑为我的课程期末项目制作一个简单的游戏引擎。我希望它是模块化和可扩展的,以便我可以添加新的部分,如果我有时间。例如,我将制作一个完全独立于其他系统的图形引擎,一旦完成,我可以添加一个物理引擎等等。 我还想做一个工具集来配合这个引擎。对于工具,我想使用C#,但我不确定库。我的问题是,如果我想要一个C++的GUI程序,我可以参考C++编写的一个库吗?如果我在C语言中制作了一些库,但希望从C++游戏中使用它们,那么会有性能问题等。 我想尽量避免C++,我的经验表明,开发项目的时间比使用C或ja

我正在考虑为我的课程期末项目制作一个简单的游戏引擎。我希望它是模块化和可扩展的,以便我可以添加新的部分,如果我有时间。例如,我将制作一个完全独立于其他系统的图形引擎,一旦完成,我可以添加一个物理引擎等等。 我还想做一个工具集来配合这个引擎。对于工具,我想使用C#,但我不确定库。我的问题是,如果我想要一个C++的GUI程序,我可以参考C++编写的一个库吗?如果我在C语言中制作了一些库,但希望从C++游戏中使用它们,那么会有性能问题等。

<>我想尽量避免C++,我的经验表明,开发项目的时间比使用C或java的项目要高很多。我的图形开发将在OpenGL中进行,这就是我所教的全部内容。我们只在C++中完成了这项工作,但是我已经看到了一些项目,比如允许用C语言开发。这是否存在任何性能问题。我不是在寻找一款速度极快的顶级图形游戏。这将很可能是一些简单的东西来显示我的引擎工作。我的引擎可能也不会那么好,因为我只有一年的时间,我自己在工作

如果您对此有任何建议,我们将不胜感激。我还真的处于计划阶段,所以完全改变我想做的事情不会太多。我只想先发制人地解决我可能遇到的任何重大问题

谢谢

你应该调查一下。它的性能相当好,据我所知,很容易使用


关于C++引用C++代码的问题:这是完全可行的,不过从你的方面需要一些努力才能正确。C++/CLI可以用作中间包装器,也可以使用P/Invoke。请记住C++是非托管的,并且您需要做一些手动垃圾收集,这在像.NET这样的托管环境中可能有点不正常。在C++ +-C桥中的性能是Okayy,但是如果你需要每秒调用100个数学库,它将如何执行,我不确定它会如何执行。我想一个小测验就好了。。我会看看今天晚些时候是否有时间做这件事,尽管我有点怀疑:)

听起来你的项目有一个很好的计划。(我在您对@Meeh的评论中了解到您对XNA的观点)

你可以通过P/Unjk直接或COM与C++进行交互,你也可以猜出一些SOA的方式来做,但是老实说,我会倾向于把COM作为你的API选择……为什么?因为这样你就可以打开你的API来使用很多通用的客户端语言,不仅仅是C#和VB.NET,你还可以使用Delphi,VBA,Powerbuilder等等


性能不应该是一个问题,因为API入口点只是为了启动工作和传输数据结构,真正的工作是在您的库中以本机代码完成的,所以不要太担心性能。ATL将是您创建COM类的朋友,这些COM类将为您的库提供入口。

如果您能够在轻松的目标下实现这一点,您将迎来一个伟大的项目。首先,您需要掌握范围:

  • 你要在这个项目上工作多久
  • 有多少人在做这个项目
  • 如果你只能自己创造一块“馅饼”,你会选择哪一块?用它来建立一个工作计划,以确保如果你没有达到你想要的程度,你仍然有足够的时间让工作成为一个伟大的项目
游戏引擎是一项巨大的开发任务。带有工具链的游戏引擎是一项巨大的开发任务。在很多方面,选择一个更小但更具挑战性的任务是可取的,因为它显示了对问题解决的更高层次的思考,这是学者们非常喜欢的——如果你是CS而不是工程领域的话,这是你的两倍。由于您在管理语言中工作,您可能需要考虑的事项是:

  • 以一种干净的方式表达游戏逻辑(游戏规则),以便从设计器->开发人员->测试人员提供高效可靠的路径。如果您愿意,这完全可以包括您描述规则的方式(自定义编辑器?代码API?DSL?)
  • 游戏AI不乏极具挑战性的问题
  • 物理和图形很有趣,我相信托管语言最终会在这些领域使用,但您可能会发现自己解决这些问题的能力有点有限。如果我现在要在这一领域工作,我会试图回答:“如果我可以使用托管语言编写[图形|物理]代码而不影响性能,那么什么样的[语言|运行时]功能在提高结果程序的表达性、正确性、可维护性和可靠性方面最为重要。”这远远超过了简单的垃圾收集和指针安全

虽然它确实能够在C++和C语言之间架起桥梁(通过托管C++是一个很好的方法,如果接口复杂,P/Voice调用非常简单的一个),对于工具引擎通信,我可能会建议使用基于网络的接口。这是高级界面的理想选择,例如您可能需要的级别编辑器/模型查看器等。一个实际的对象建模者并不是一个很好的目标。你设想使用什么工具


通过这种方式,您可以连接到引擎的远程实例、多个实例,甚至是运行在不同硬件平台上的实例。如果您还不了解套接字,它还会教您一些有关套接字的知识

在创建图形引擎时(我只说图形,因为这是我的专业领域),您需要在项目早期做出以下选择:

1) 它是室内和/或室外发动机吗?
2) 您将使用哪种可见性系统?
3) 远期还是延期