64

我想将 Javascript 嵌入到我的爱好游戏引擎中。现在我们已经推出了第 5 代 Javascript 引擎(速度非常快),我很好奇您会选择在 C++ 框架中嵌入什么引擎(包括嵌入它的实际易用性)?

注意:为了清楚起见,我对 DOM 脚本或在浏览器中编写 Javascript 不感兴趣。

这是迄今为止的链接汇编和线程中的一些提示

只是为了记录,我喜欢 Lua 并且已经在游戏引擎中嵌入了大约 5 次。

然而现在这是一个业余项目,我认为大多数 Web 开发人员都知道 Javascript,因为它的 ECMA、Flash 和 Flex 开发人员,一个使用 Javascript 和 XML 编写脚本的游戏引擎会更加用户友好,并迎合更大的用户需求。用户群(到目前为止还没有机会将他们的技能用于游戏的用户群)比使用 Lua 的用户群(周围有很多这样的人!)。

另外为了记录,我将在这个上使用 V8,主要是因为我喜欢它的 C++ 风格。

4

10 回答 10

19

我已经尝试过 SpiderMonkey 和 V8。有了 SpiderMonkey,我什么都做不了。我什至无法编译 mozilla.org 上的示例。

V8 开箱即用,我很快就获得了一些基本的 C++ <-> Javascript 交互。有一些使用 V8 的人的谷歌列表,我发现我的大部分问题已经在那里得到了解答。

于 2008-10-10T04:17:14.297 回答
18

Mozilla 的 SpiderMonkey相当简单且文档齐全。它是一个 C API,但用 C++ 包装它很简单。它可以编译为线程安全的,这对游戏很有用,因为您可能希望将主逻辑放在一个线程中,将用户界面逻辑放在第二个线程中。

Google 的 V8可能是一个不错的选择,因为您使用的是 C++,但我还没有这方面的经验。根据文档(感谢Daniel James),V8 不是线程安全的,尽管将来可能会改变。

还有WebKit 的 SquirrelFish,但我之前看的时候找不到它的独立版本。

于 2008-09-18T15:41:22.037 回答
8

Java Script 真的是适合您游戏的语言吗?许多游戏都使用Lua编程语言编写脚本。它易于集成,体积非常小,几乎可以在每个平台上编译,而且易于学习。

这有点离题,但跳出框框思考对于正确处理事情可能很重要。

于 2008-09-18T17:26:14.263 回答
8

我相信 v8 目前仅适用于 x86、x64 和 arm 处理器。这可能是一个缺点。

关于线程安全,来自include/v8.h

 * Multiple threads in V8 are allowed, but only one thread at a time
 * is allowed to use V8.  The definition of 'using V8' includes
 * accessing handles or holding onto object pointers obtained from V8
 * handles.  It is up to the user of V8 to ensure (perhaps with
 * locking) that this constraint is not violated.

您可以在源文件中阅读更多内容(它看起来像 doxygen 文档,但他们似乎没有将它放在任何地方)。

更新:该评论已被删除,可能是一段时间前。看起来 v8 现在有一个Isolate代表引擎实例的对象。单个Isolate实例一次只能在单个线程中使用,但其他Isolate实例可以同时在其他线程中使用。

于 2008-09-18T21:29:55.957 回答
7

当谈到脚本引擎和 c++ 时,您还可以考虑chaiscript。它接近 ecma 脚本(~Javascript)并且很容易嵌入到 c++ 中。

来自网页的卖家:

...另一方面,ChaiScript 的设计从一开始就考虑到了与 C++ 的集成。... ChaiScript 没有元编译器,没有库依赖项,没有构建系统要求,也没有任何类型的遗留包袱。At 可以与您向其公开的任何 C++ 函数无缝协作。它不必明确告知任何类型,它是以功能为中心的。

使用 ChaiScript,您可以通过将三行代码添加到程序中来开始编写应用程序脚本,而根本不需要修改构建步骤。

于 2011-11-30T05:21:30.637 回答
6

当 V8 首次出现时出现的基准显示 V8 比其他引擎快 1000%(或其他),这在很大程度上偏向于支持擅长递归的引擎。如果您的代码使用大量递归,那么 V8 可能会在速度方面为您提供显着优势。对于“现实世界”(至少目前)网络内容,SquirrelFish Extreme 目前似乎是毫无疑问的赢家(有关我自己的非正式测试结果,请参阅我关于该主题的博客文章)。

正如其他人所指出的,易于集成和文档质量可能胜过纯粹的速度。如果您不发货,这并不意味着杰克!

于 2008-09-19T02:30:00.620 回答
3

我会等待 TraceMonkey,SpiderMonkey 的下一个进化版本问世。更快更好的设计。(使用从 Adob​​e Flash 捐赠的代码)。

Tracemonkey 以在运行时根据实际使用情况积极优化结构来加快重复动作而自豪,这对于游戏增强来说非常方便。

于 2008-09-18T15:52:13.147 回答
2

尝试 Javascript .NET:

http://javascriptdotnet.codeplex.com/

它实现了谷歌 V8。您可以使用它直接从 .NET 代码编译和运行 Javascript,并提供 CLI 对象以供 Javascript 代码使用。就性能而言,V8 可能是有史以来最好的引擎,它从 Javascript 生成本机代码。

于 2010-07-08T12:02:24.927 回答
1

您可能还想查看 Google 的V8。不过,它很新。

于 2008-09-18T15:57:07.490 回答
1

我会密切关注 v8,因为它正在尖叫快速的 JavaScript 引擎,我相信随着它的成熟,它会开发跨平台支持。

于 2008-09-18T21:43:52.960 回答