我想在我的爱好游戏引擎中嵌入Javascript。现在我们已经推出了第5代Javascript引擎(所有速度都很快)我很好奇你会选择在C ++框架中嵌入什么引擎(包括嵌入它的实际容易程度)?
注意:为了说清楚,我对DOM脚本或在浏览器中编写Javascript不感兴趣。
这是迄今为止的链接汇编和线程的一些提示
仅仅是为了记录,我喜欢Lua并且已经在游戏引擎中嵌入了大约5次。
然而现在这是一个业余爱好项目,我认为Javascript被大多数Web开发人员所熟知,并且因为它的ECMA,Flash和Flex开发人员,使用Javascript和XML进行脚本编写的游戏引擎会更加用户友好并且更加友好到一个更大的用户群(而且到目前为止还没有机会使用他们的游戏技能)比一个Lua(并且周围有很多人!)。
另外,对于记录,我将在这个上使用V8,主要是因为我喜欢它的C ++风格。
答案 0 :(得分:16)
Mozilla's SpiderMonkey相当简单且记录良好。它是一个C API,但它很容易用C ++包装。它可以被编译为线程安全的,这对游戏很有用,因为你可能想要在一个线程中使用主逻辑,在第二个线程中使用用户界面逻辑。
Google's V8可能是一个不错的选择,因为你使用的是C ++,但我还没有使用它的经验。根据{{3}}(感谢the documentation),V8不是线程安全的,尽管将来可能会发生变化。
还有Daniel James,但在我之前看时,我找不到它的独立版本。
答案 1 :(得分:16)
我已经尝试过SpiderMonkey和V8。使用SpiderMonkey,我无法获得任何工作。我甚至无法在mozilla.org上获得编译的示例。
V8开箱即用,我得到了一些基本的C ++< - > Javascript交互很快就会发生。对于使用V8的人来说,有一些谷歌列表,我发现我的大部分问题都已在那里得到解答。
答案 2 :(得分:8)
Java Script是否真的适合您的游戏? 许多游戏都使用Lua编程语言进行脚本编写。它易于集成,非常小,几乎可以在每个平台上编译,而且易于学习。
这个有点偏离主题,但是开箱即用的想法对于把事情做好是很重要的。
答案 3 :(得分: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
实例可以同时在其他线程中使用。
答案 4 :(得分:6)
当V8第一次出现在场景中时出现的benchmark显示V8比其他引擎快1000%(或者其他什么)的速度很大,偏向于支持擅长递归的引擎。如果你的代码使用了大量的递归,那么V8可能会在速度方面给你一个显着的优势。对于“真实世界”(目前,至少)网络内容,SquirrelFish Extreme目前似乎是落后的赢家(请参阅my blog post on the topic了解我自己的非正式测试结果)。
正如其他人所指出的那样,易于集成和文档质量可能优于纯粹的速度。如果你不发货,这并不意味着杰克!
答案 5 :(得分:6)
在谈到脚本引擎和c ++时,您也可以考虑chaiscript。它接近ecma脚本(~Javascript),很容易嵌入c ++。
网页上的卖家:
另一方面,ChaiScript是从头开始设计的 考虑到与C ++的集成。 ... ChaiScript没有元编译器,没有库依赖,没有构建 系统要求,没有任何遗留的行李。在工作 与您公开的任何C ++函数无缝连接。它没有 要明确告知任何类型,它是以功能为中心的。使用ChaiScript,您可以逐步开始编写应用程序脚本 在程序中添加三行代码而不修改你的代码 完全建立步骤。
答案 6 :(得分:3)
我会等待TraceMonkey,SpiderMonkey的下一个演变出来了。更快更好的设计。 (使用从Adobe Flash捐赠的代码)。
Tracemonkey通过在运行时根据实际使用情况积极优化结构来更快地重复操作,这对于游戏增强来说非常方便。
答案 7 :(得分:2)
试试Javascript .NET:
http://javascriptdotnet.codeplex.com/
它实现了Google V8。您可以直接从.NET代码编译和运行Javascript,并提供Javascript代码使用的CLI对象。 V8可能是有史以来最好的引擎,它可以从Javascript生成本机代码。
答案 8 :(得分:1)
您可能还想查看Google的V8。不过,这很新鲜。
答案 9 :(得分:1)
我会关注v8,因为它是尖叫快速的javascript引擎,我相信它会随着它逐渐成熟而开发跨平台支持。