如何在XNA引擎中嵌入Ruby?

3
我想知道是否可以将Ruby作为脚本语言嵌入Microsoft XNA中,以及最佳方法是什么。我正在寻找类似于Xnua的东西,但是用Ruby代替。
我偶然发现了Ruby.NET和IronRuby,但两者都处于非常早期的阶段,所以我不确定它们是否可用。此外,我不确定它们是否适用于Xbox 360。例如,这个XNA论坛上的主题说IronPython不起作用。
5个回答

8
IronRuby和IronPython无法在Xbox 360上运行,因为它们基于DLR(动态语言运行时),而DLR大量使用System.Reflection.Emit类型,这些类型目前在Xbox 360 .Net Framework上不可用(这是Compact .Net Framework的修改版本)。
至于最佳方法,不幸的是这取决于您游戏的其余部分。使IronRuby脚本在XNA程序中进行评估的工作相当容易,请查看此博客文章作为示例。除此之外,您需要向脚本公开一些有趣的对象,这完全取决于您游戏代码/设计的其余部分。您可以查看Unity的脚本文档,以了解要公开哪些类型和命令。

Ruby.net能在Xbox360上运行吗?我的理解是它不是基于DLR的,但我甚至不确定它是否仍在开发中。 - Firas Assaad
我不确定,但如果Ruby.Net也使用了System.Reflection.Emit类型,我也不会感到惊讶。你可以查看源代码,只需搜索该命名空间即可。 - Leaf Garland

2

几乎可以确定 IronRuby 在 Xbox 上不可用,但如果您只是想为 Windows 开发 XNA 游戏,则应该能够像任何其他应用程序一样使用它。

我无法告诉您如何去做,只知道这应该是可能的。


真有趣。我还在想这是否也适用于Ruby.NET或其他我不知道的解释器。也许可以尝试编写自己的“简单”的.NET绑定,能在Xbox上运行? - Firas Assaad

1

虽然我同意Leaf Garland的观察,但我想提供另一种选择:

游戏中“首选”的脚本语言是Lua。例如,游戏Crysis和Far Cry广泛使用LUA。请参阅wikipedia上列出的使用它的知名游戏列表。

就在XNA中使用它而言,我只是刚开始自己的业余XNA开发,所以我只是浅尝辄止,但我知道的是,你不能直接在XNA中使用LUA。这是因为LUA是用C++(非托管)构建的,因此您将无法将其部署到XBOX360上。

目前有一个正在开发中的项目,正在构建LUA的XNA版本,网址为http://www.xnua.com/。这也是一个免费产品,源代码也可供下载。

如果游戏行业认为LUA足够好用于AAA商业游戏,那么我个人也会遵循这个方向(基于他们在这个领域拥有更多的经验)。


我喜欢Lua,但问题与Ruby有关,因为我已经有很多Ruby代码。真正的答案可能是无法在XNA中嵌入Ruby,但我仍然想知道其他人的想法。 - Firas Assaad
1
哎呀!请不要使用LUA,因为它与Lua的含义不同。 - RCIX

0

虽然它不是Ruby,而且这是一个老问题,但我想向您介绍一个我一直在构建的新脚本引擎。它可以在几乎任何有.Net框架的地方运行,包括在XNA下的Xbox360上。它不使用Reflection.Emit,因此可以在其他语言无法运行的地方工作。它也是完全托管代码,所以像Lua那样没有P/Invokes。

您可以从我的博客获取更多信息,并可以在演示页面上尝试它

它已经快要准备好进行测试了,但在测试之后,它将成为商业许可的组件


0

为什么不使用Ruby进行PC开发,而使用Lua进行360开发呢?

编辑:也许this会有用。


因为已经有很多代码是用Ruby编写的,我不想重新写一遍。 - Firas Assaad

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接