【问题标题】:What is Cocos2d-JS?什么是 Cocos2d-JS?
【发布时间】:2014-10-28 15:02:22
【问题描述】:

Cocos2d-JS 是 Cocos2d-x 引擎的 JavaScript 版本,包含 Cocos2d-html5 和 Cocos2d-x JavaScript 绑定。它装备你的游戏 具有跨浏览器和跨平台的能力,伴随着完整的 Cocos2d-x 功能和简化的 JavaScript 友好 API。

我知道你写 JS 并且它在任何地方都可以工作,但是它是如何完成的呢?我想理解这张图:http://www.cocos2d-x.org/wiki/Getting_Started_Cocos2d-js 据我了解,cocos2d-html5 与 cocos2d-x 相同,但它是在 JS 中并基于 WebGL。如果这是真的,那么 Cocos2d-JSB 是什么?它是否将 JS 脚本编译为本机代码?还是 JS 扩展解释器,比原生解释器更懂,可以解释 cocos2d 特定的命令?

【问题讨论】:

  • 据我所知,Cocos2d-JS 使用 JavaScript Bindings 与 Cocos2d-X 通信,可以编译成原生代码。我只使用 Cocos2d-JS 一个月,所以我远非专家,对实际答案非常感兴趣:)

标签: cocos2d-x cocos2d-js cocos2d-html5


【解决方案1】:

据我了解 cocos2d-html5 与 cocos2d-x 相同,但它是 在 JS 中并基于 WebGL。如果这是真的,那么 Cocos2d-JSB 是什么?

我相信 cocos2d-x JSB 后面的 JSB 只是意味着:cocos2d-x JavaScript Bindings

在两种编程语言之间进行翻译/调解的模块通常称为“绑定”。 JSB 只是 cocos2d-x 的一个小方面,它允许用户通过 cocos2d-x C++ 渲染引擎运行用 cocos2d-js Javascript 编写的应用程序。

请注意,cocos2d-html5 与 cocos2d-x 并不完全相同。它提供了与 cocos2d-x 类似的功能,但只能在 Web 浏览器中运行。显然 cocos2d-html5 没有触摸或加速度计输入的功能,以及在保存和加载文件时的其他限制。

它是否将 JS 脚本编译为本机代码?还是 JS 扩展解释器,比原生解释器更懂,可以解释 cocos2d 特定的命令?

JSB 只是在 Javascript API 和 C++ cocos2d-x 版本的类、方法、标识符等之间进行映射。

我不知道它是否将 Javascript 编译为本机代码。

要点:

cocos2d-js 在 Javascript 中提供了一个编程接口 (API),无论您是通过 cocos2d-html5 在浏览器中运行它,还是通过 cocos2d-x 在其他(移动)平台上运行它,都会产生相同的结果。

【讨论】:

  • 感谢您的回答,但我不明白映射 JavaScript API 和 cocos2d-x 类是什么意思。而且我也不明白它是如何进行映射的。
  • 简单例子:你有一个像 doSomething() 这样的 JavaScript 方法,这个方法实际上是作为 C++ 方法实现的。 JSB 所做的是确保每当您在 Javascript 端调用 doSomething() 时,它都会在 C/C++ 端查找并运行等效的方法。现在,当您使用 cocos2d-html5 作为后端时,该方法转而转发到 cocos2d-html5 框架中 doSomething() 的相应 Javascript 实现。
  • 这是如何工作的太宽泛了,无法回答,也没有必要理解它的原理。事实上,您甚至根本不需要关心 JSB,它对最终用户来说是完全不透明的。
【解决方案2】:

Cocos2d-x 使用 SpiderMonkey,Firefox JS 虚拟机 (VM), 执行JS代码。

JS VM 扩展支持所有 cocos2d、Chipmunk 和 CocosBuilder Reader API。 所以,当你在 JS 中创建 CCSprite 时,你 实际上是在创建一个 C++ CCSprite。当您在 JS,你实际上是在创建一个 C++ 动作,当你创建一个 JS 中的粒子系统,你实际上是在创建一个 C++ 粒子 系统……等等。这种方法比 HTML5 快大约 10 倍~20 倍 游戏即使他们使用像 directCanvas 这样的加速器基本上都是 cocos2d、Chipmunk 或 CocosBuilder 阅读器 API 将执行 几乎以本机速度。但是你应该注意以下几点 场景:垃圾时性能可能会变慢 收集器运行。解决方法:不要创建很多 JS 对象。复用为 尽可能多 拥有一个复杂的主循环可能会减慢 表现。解决方法:分析你的 JS 代码,如果你不能 进一步优化它,用 C++ 编写昂贵的部分并创建 JS 这些函数的绑定。

这是来自wiki.所以扩展了JS解释器来理解cocos2d api命令比如create Action或者create Sprite。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-12-25
    • 2016-05-02
    • 1970-01-01
    • 2021-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多