【问题标题】:How can one port Cave Story (NXEngine) to Native Client如何将 Cave Story (NXEngine) 移植到 Native Client
【发布时间】:2012-12-21 18:55:18
【问题描述】:

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

【问题讨论】:

    标签: c++ google-chrome open-source google-nativeclient


    【解决方案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,@ 987654331@ 等。从 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 或更高版本为目标,因此使用 Pepper 25 版本的 NaCl SDK 可能会减少此类应用程序的重构工作量。

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

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

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多