2014-10-28 34 views
2

Cocos2d-JS是Cocos2d-x引擎的JavaScript版本,包括 Cocos2d-html5和Cocos2d-x JavaScript绑定。它为您的游戏 提供了跨浏览器和跨平台功能,并附有完整的 Cocos2d-x功能和简化的JavaScript友好API。什么是Cocos2d-JS?

我知道你写JS,它可以在任何地方工作,但它是如何工作的?我想了解这个图:http://www.cocos2d-x.org/wiki/Getting_Started_Cocos2d-js据我所知,cocos2d-html5与cocos2d-x是一样的,但是它在JS中并且基于WebGL。如果这是真的,那么Cocos2d-JSB是什么?它是否将JS脚本编译为本地代码?或者它是一个JS扩展解释器,它不仅可以理解本地解释器,还可以解释cocos2d特定命令?

+0

据我所知,Cocos2d-JS使用JavaScript绑定与Cocos2d-X进行通信,Cocos2d-X可以编译为本地代码。我只用了一个月的Cocos2d-JS,所以我远离专家,对实际的答案非常感兴趣:) – Simon 2014-10-28 15:27:04

回答

0

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 Reader API都将以本机速度执行 。但是您应该注意以下 方案:运行垃圾收集器时性能可能会下降。解决方法:不要创建许多JS对象。重复使用 尽可能多复杂的主循环可能会降低性能。解决方法:分析您的JS代码,如果您不能对其进行进一步优化,请使用C++编写昂贵的部分,并为这些函数创建绑定的JS 。

这是来自wiki.所以JS解释器扩展了解cocos2d api命令,例如create Action或创建Sprite。

1

据我所知,cocos2d-html5与cocos2d-x是一样的东西,但它在JS中是基于WebGL的 。如果这是真的,那么Cocos2d-JSB是什么?

相信JSB附加到的cocos2d-x JSB仅仅意味着:的cocos2d-x的JavaScript绑定

,做两种编程语言之间的翻译/中介通常被称为一个模块“捆绑”。 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。

+0

感谢您的回答,但我不明白映射JavaScript API和cocos2d意味着什么-x类。我不明白它是如何做到这一映射。 – Narek 2014-10-28 19:04:09

+0

简单的例子:你有一个像doSomething()这样的JavaScript方法,这个方法实际上是作为C++方法实现的。 JSB所做的是确保每当你在Javascript端调用doSomething()时,它会查找并在C/C++端运行等价的方法。现在,当您使用cocos2d-html5作为后端时,该方法被转发到cocos2d-html5框架内相应的doSomething()的Javascript实现。 – LearnCocos2D 2014-10-28 20:10:20

+0

这是如何运作的,其范围太广而无法回答,而且无需理解它在原则上的作用。事实上,你根本不需要关注JSB,它对最终用户来说是完全不透明的。 – LearnCocos2D 2014-10-28 20:11:00

相关问题