将C++游戏移植到Web的最佳方式

5
我认识到上述问题比较宽泛,所以我会将其缩小范围。我有一个简单的OpenGL C++游戏引擎,它存在于静态库中(可以转换为动态库)。
我一直在思考如何让它在web中运行。据我所知,我可以使用ActiveX或Google NaCl在浏览器中运行C++代码。但是这些技术似乎不容易跨平台?或者我可能误解了。
我看到的另一个选择是将引擎转换为JavaScript和WebGL,并在HTML5画布中运行。这会比C++更慢吗?尽管如此,它会非常跨平台。
你认为哪种选择最好,或者更好的是我是否漏掉了其他选择?
编辑:类似于Unity WebPlayer的自定义插件如何?

恐怕没有一种简单且可移植的方法来做到那一点。涉及到的技术差异太大了。我知道Quake III被“移植”到了Web上,但我相信他们不得不重写很多内容。 - ereOn
那么如果我要使用ActiveX类型技术,我就必须为每个网络浏览器编写不同的版本? - DavidColson
3个回答

6

@kripken创建了一种仍在开发中的库。它可以将LLVM汇编代码转换成JavaScript。您可以在这里查看该项目页面,并使用其中的示例。 https://github.com/kripken/emscripten/


3
我强烈建议迁移到NaCl。
优点: 1.性能:您可以利用CPU的全部功能来渲染游戏。如果您的游戏使用良好的三维图形或物理学,即使在旧系统配置上,也可以使其看起来流畅。与Win32版本相比,NaCl的性能可与本机操作系统应用程序相媲美,只会损失近5至10%的FPS。 2.已经有很多已经迁移到NaCl的示例和游戏,可以帮助您轻松完成。 3.已经跨平台。Chrome运行在Windows,Linux,Mac OSX上。
缺点: 1.可能需要花费你大约一周的时间进行移植。您必须移植到OpenGL ES 2.0(然而,它应该与任何基于浏览器的方法,特别是HTML5相同)。 2.仅在Chrome上运行。

1
我已经将Irrlicht渲染引擎移植到NaCl上,与任何基于JavaScript的游戏性能相比,性能真的非常好。 - codetiger

1

如果你想要在浏览器中使用便携式的东西,那么它必须依赖于Javascript(很可能还需要WebGL,尽管IE不支持它)。

ActiveX和NaCL根本就没有任何可移植性。

我不能说哪个更容易,但你有一个选项,可以将你的游戏重写为Javascript,或者使用像Emscripten这样的工具将你的C++编译成JavaScript。

请注意,如果你使用后者,它仍然不是万能药。你可能需要对你的代码进行大量更改(例如,因为在你的C++游戏中使用的库和API在浏览器上不可用)。


请注意,PNaCL是完全可移植的。目前支持X86(-32,-64)和ARM,但它可以扩展到其他平台,因为它基于LLVM位代码。就操作系统而言,它目前适用于:Linux、Mac、ChromeOS、Windows...目前还没有移动端(然而我不认为有技术障碍,这似乎只是时间问题)。由于问题并没有说明是关于桌面/移动端还是跨桌面兼容性的,我会说它是可移植的跨平台 - https://dev59.com/qmbWa4cB1Zd3GeqPYZlM#11685887。 - Grzegorz Wierzowiecki

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