0

因此,Native Client 可以从浏览器运行 C++ 代码,而且我知道NX 引擎 是从 C++ 构建的,并且可以进行调整以在 Android 上运行。那么,如果 NX 引擎可以运行 Cave Story,并且理论上可以在本机客户端中运行,那么您如何让它工作和托管,以便人们可以访问页面并在浏览器中玩游戏?

4

2 回答 2

1

要将 NXEngine 移植到 Native Client,您需要移植 NXEngine 本身(当然!)以及它的依赖项。让我们考虑它们中的每一个:

移植到 Native Client 非常类似于移植到一个新的——在很多方面更像是 Linux——操作系统。但是,有一些重要的区别:

  • Native Client 的“操作系统”API 是 Pepper,或 PPAPI,一组提供对浏览器功能的访问的 API。大部分移植工作通常是让您的代码使用 Pepper API 来打开文件、显示图形、播放声音等(不过,SDL 使输入、声音和图形变得更加容易)。要打开文件,人们经常使用nacl_mounts一个封装了 Pepper File API 的库,这样就可以将应用程序的 HTML5 Web Storage 或 Web 上的 URL 作为文件系统挂载,然后使用熟悉fopen的 ,fread等。来自 Pepper 25,部分nacl_mounts包含在 NaCl SDK 中。

  • Native Client 模块不能使用本机操作系统调用,也无法访问主机文件系统。这是出于安全原因并确保可移植性。

  • Pepper 目前没有非实验性的字体 API。因此,所有字体渲染都必须在您的代码中完成,并且任何.ttf文件都必须作为应用程序的一部分提供,因为 Native Client 将无法访问.ttf. 出于安全原因,主机系统上的文件。

推荐使用 Chrome/Pepper 25:从历史上看,Pepper API 调用只能从主线程进行。这需要对游戏和其他多线程程序进行重大重构,例如,在一个线程上渲染并在另一个线程上播放音乐。从 Chrome 25 起,此限制不再存在。有关详细信息,请参阅https://developers.google.com/native-client/dev/peppercpp/classpp_1_1_message_loop。以 Chrome 25 或更高版本为目标,因此使用 NaCl SDK 的 Pepper 25 版本可能会减少此类应用程序的重构工作量。

在网页上运行 Native Client:问题提到可以“访问页面并在浏览器中玩游戏”。重要的是要知道此时只有 Chrome 支持 Native Client。当前一代 Native Client 和即将推出的 Portable Native Client 之间还有一个重要区别,后者要求将 Web 应用程序放在 Chrome Web Store 中才能运行 Native Client,后者将允许在任何网页上显示 Native Client 内容。为了让网页上的访问者能够以最少的弯路使用基于 NaCl 的当前一代应用程序,Chrome 网上应用店内联安装(请参阅https://developers.google.com/chrome/web-store/docs/inline_installation)可以避免用户需要去 Chrome 网上应用店。

关于naclports: naclports的注释是 Native Client 的基于社区的存储库。它包含几个库和以前的端口。naclports您可以在http://code.google.com/p/naclports/source/browse/trunk/src/libraries/中查看库列表。虽然它包含有关如何进行移植的有用示例,但它naclports不适合胆小的人,因为它经常损坏并且 - 鉴于它是在志愿者/尽力而为的基础上维护的 - 可能需要时间来修复。

其他提示:*此答案中有一些其他提示和指南提示:Google Chrome Extension using NaCL with an external library

于 2012-12-24T11:52:49.310 回答
1

有趣的是,我已经移植了它!它真的不需要太多改变(但我还是做了很多改变)。

我有一段时间没有尝试重新编译它,所以它可能已经坏了。也许我会花一些时间尝试让它再次工作...... :)

您可以在http://github.com/binji/nacl-nxengine找到它

于 2013-06-07T21:21:32.897 回答