01. WebApp2.0时代启程:Cocos2d-JS详解(一)

简介: (一)WebApp时代,追求App开发效率的同时,我们也要求终端的体验和性能,2/8原则可以很好的阐述当前的hybird开发方式:20%的Native代码+80%的H5代码。 ![5a96ccb3abc157b98a67b7bcfa8c2e9d](http://img2.tbcdn.cn/L1/461/1/f0fe01c8c83bbc680afd4e785eb21e53d3367bc5) (二

(一)WebApp时代,追求App开发效率的同时,我们也要求终端的体验和性能,2/8原则可以很好的阐述当前的hybird开发方式:20%的Native代码+80%的H5代码。
5a96ccb3abc157b98a67b7bcfa8c2e9d
(二)H5可以发挥的性能极致是什么样子?
了解这个问题,就需要知道H5的技术定位:一套H5代码支持Android、iOS、PC等多平台的前端语言,这就决定了再好的iOS平台性能,也不能忘记Android平台的用户体验;最终开发者选择了降低用户体验情况下,降低了H5的用户体验。
dd5d4aee63ec7b93330e9fe1e4c4d99e
(三)H5可以做的更好,不管是Android还是iOS!
这个时候,cocos2d-js出现了,大家有兴趣的可以参考一下官网的demo《js-moonwarriors》,在多精灵动画和复杂的游戏场景下,Android平台也可以达到60FPS的效果!是不是很劲爆?
59cb62397574d0d3199ef8706587e1a3
(四)回归主题,引用官方的说明:
Cocos2d-JS是Cocos2d-x的JavaScript版本,融合了Cocos2d-HTML5和Cocos2d-x JavaScript Bindings(JSB)。

(五)Cocos2d-HTML5
Html5给我们带啦丰富且强大的API,让前端设计者开发出绚丽的显示效果,我们这里主要分析:Canvas、WebGL

  1. Canvas传统的网页游戏和动画展示,很大程度上依赖了H5中得Canavs模块,Canvas模块为JS提供了直接操作底层GPU的机会。
    示例:

screenshot
Context本质上是一个OpenGL的上下文管理对象,封装了常见的OpengGL操作,包括点、线、多边形图形库,还包括了图像、矩阵等功能。经过主流的一些游戏框架的封装,可以基本满足2D游戏的功能,例如:pixi、phaser、kissy等框架,再加上一些物理引擎,比如box2d等,就可以实现复杂的游戏场景。【阿里GCanvas引擎,就是基于Canvas的性能优化,后续讲解】

2.WebGL提供了相对OpenGL ES 2.0完整的API,可以说是一一对应,相比CanvasAPI,WebGL可以说就是简单的把openGLES的API映射给了JS,从此JS拥有了像C/C++一样的GPU操作能力。我们知道,移动平台几乎所有的图像框架的基础都是基于OpenGL,WebGL极大的降低了JS操作GPU的路径,省去了中间环节,当然JS的性能远不能媲美C/C++,但是如果js的运行速度可以媲美java,是否可以写出像Android一样高性能的页面呢?【当然可以,先挖个坑】

(六)Cocos2d-JSB【JS与Native的粘合剂】
触控的JSB即:JavaScript Binding Cocos2d-x To SpiderMonkey,将高性能的Cocos2d-x直接集成到一个JsVM中,将C/C++代码直接预置成JS的内部函数或者对象,把JS不擅长的浮点数计算和矩阵转换,交给C/C++技术,JS制作数据的中转和业务的处理,为游戏引擎的大规模运算提供基础。
d53254cdf642592bf5bde5a23fbc9aba
(七)SpiderMonkey【JS运行引擎】
SpiderMonkey是由C语言操作的JavaScript引擎,它支持JS1.4和ECMAScript-262规范。该引擎分析、编译和执行脚本,根据JS数据类型和对象的需要进行内存分配及释放操作。利用该引擎可以让你的应用程序具有解释JavaScript脚本的能力,目前已有若干个项目都采用了SpiderMonkey引擎,像K-3D、WebCrossing、WebMerger等。
下图是Cocos2d-JS内部集成的第三方引擎库:
screenshot

在这里不得不提一下为什么选择SpiderMonkey而不是V8、JavaScriptCore?【请持续关注】

(八)Cocos2d-x【图形引擎】
我们的操作系统,本质上就是一个图形引擎,cocos2d我这里就不做讲解了,毕竟咱们是一家做电商的公司,做好移动app,远离游戏。

(十)Cocos2d-JS是搅动H5世界的鲶鱼
请看下一章节分享。

(总结)WebGL是助推器,可能不是最终的目标
上面我们提到,H5提供了WebGL功能,让JS直接调用OpenGL,绕过了复杂的浏览器沙箱,让性能不如C/C++的JS语言,直接操作核心绘图GPU,实现了性能的极大的释放,极大的推动了H5的发展,可以说,如果Css3是Dom新生的基础,而WebGL是H5发展火箭助推器,我们看到的Native绝大多数的绚丽效果,可以用WebGL轻松搞定。

即使WebGL提供了高效的GPU支持,然而,在图形世界里,大规模浮点数计算、矩阵转换、图像处理等,并不是JS的优势,随着H5的发展,JS在局部的性能处理上,必然遇到瓶颈,JS又会何去何从?

相关实践学习
部署Stable Diffusion玩转AI绘画(GPU云服务器)
本实验通过在ECS上从零开始部署Stable Diffusion来进行AI绘画创作,开启AIGC盲盒。
目录
相关文章
|
Web App开发 JavaScript
WebApp - Rem 自适应 JS 之精简版(flexible.js)
WebApp - Rem 自适应 JS 之精简版(flexible.js)
575 0
WebApp - Rem 自适应 JS 之精简版(flexible.js)
|
移动开发 JavaScript Java
08. WebApp2.0时代启程:倒立者赢,NativePixi,所见即所得的开发方式
紧接上文,在终端设备中,不管是游戏引擎还是UIKit,图形图像都是基于跨平台的OpenGL ES技术,区分不同的场景,图形图像分为两个分支,一个以高性能的图形显示为目标的cocos2d-x引擎,一个是以省电节能适合App的UIKit框架。 ####一)今天我们继续逆向思维 Game VS App,既然都是基于OpenGL ES,那我们找出共同点,是否可以让二者的界限,变得更模糊?既
2360 0
|
Web App开发 JavaScript Java
02. WebApp2.0时代启程:Cocos2d-JS为什么选择SpiderMonkey(二)
紧接上文,cocos2d-JS为我们提供了图形引擎、物理引擎、JS引擎等基础库,在多终端时代提供了非常nice的游戏引擎,在浏览器普及在各个终端的今天,为什么还要单独搞一套JS引擎呢? 1. 我们先看看使用SpiderMonkey的技术产品有哪些? ![screenshot](http://img1.tbcdn.cn/L1/461/1/aec02fdece92d563ae07a7dc0c0
4109 0
|
Web App开发 JavaScript Java
03. WebApp2.0时代启程:Cocos2d-JS让C++代码支持JS脚本(三)
紧接上文,JS在单线程下,性能不会比Java差,注意场景是单线程。Java的优势不仅是高级语言的特性,还具备了丰富的系统内核资源,如多线程、网络等支持,要比JS灵活的多很多,这里暂时不在讨论这些问题。 回到主题,如果我们把一个完整的C++图形引擎注入到SpiderMonkey中,把复杂的预算放到C/C++内核中,而JS只作为业务处理和内存管理,是否可以获得C/C++的运行能力,有获得了良好的
3365 0
|
JavaScript Java Android开发
04. WebApp2.0时代启程:跨平台的JSPatch
紧接上回,Cocos2d-JS通过JSBinding从C++API到JSAPI,完成了H5的跨平台加速,这一回,我们一起来见证一下JSPatch的跨平台实现,为JS语言增加消息转发机制,无需修改js脚本,让下面这段代码可以正确地运行起来: var controller = UIViewController.alloc().init(); 而不是让app翻译成: U
1784 0
|
Web App开发 新零售 移动开发
05. WebApp2.0时代启程:倒立者赢,从过去到现在的变化,看将来的发展(一)
####1. 移动互联网的兴起,我认为2009年是个分水岭。 开始的时候,我也是做Java开发,习惯了Webx架构,可以熟练的使用Spring、iBatis、veloctiy、HSF、Notify、Tair、Session这些阿里具有代表性的Java框架,也会使用IC、UIC、SC、DC等等服务集群做电商核心业务。 概括起来,基本也是三层服务端架构: ![screenshot](http:/
2103 0
|
Java 测试技术 Android开发
06. WebApp2.0时代启程:倒立者赢,跨平台技术离我们很近
紧接上文,我们提到移动互联网时代,前端的成本重复而臃肿,后端开发基本稳定,作为商业公司:利润和成本使我们不断追求的目标。这里我们从跨平台的角度,来看待如何降低成本。 ####1. 首先我们看一段视频: 3个平台:浏览器、Android、iOS,一套JS代码,运行在不同设备上【注意,终端展示没有用WebView相关容器】 ![screenshot](http://img4.tbcd
2066 0
|
缓存 Android开发 iOS开发
07. WebApp2.0时代启程:倒立者赢,从CPU到GPU,一张图片的旅行
紧接上文,终端开发使用的WindVane、wax、ReactNative等已经是一种跨平台的技术,我们称之为上层跨平台,Cocos2d-x这种直接使用C/C++,我们成为底层跨平台。上层跨平台,提升开发效率;下层跨平台,提升程序性能。 ####1. 为什么Cocos2d-x性能比Native开发要好? 因为Cocos2d-X是游戏引擎呗,人家是专业做游戏特效的好不好,直接调用GPU的Ope
2719 0
|
前端开发 JavaScript Java
09. WebApp2.0时代启程:倒立者赢,挑战Android性能极限
紧接上文,在终端硬件资源有限的大背景下,业务脚本+图形内核,将是未来主流的开发方式。AEPixi使用C/C++、JS、JNI、OC等混合语言开发,将pixi.js变成高性能的Native内核,提供上层pixi.js标准的API,无缝的兼容浏览器开发好的代码,实现浏览器开发,无需编译,到处运行的开发方式。 今天我们做一个H5的Demo,使用FireFox开发,开发完成之后,直接使用上一
2320 0
|
2月前
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp的客户关系管理系统附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp的客户关系管理系统附带文章源码部署视频讲解等
69 2