Cocoscreator + box2dweb-commonjs

http://www.cocoachina.com/bbs/read.php?tid=458895&page=1&toread=1#tpc
大家好久不见了哇。。

哎。最近各种事情啊,越来越忙了哇。。。
抽空折腾了下box2d。。。
第一次玩的box2d,网上教程看到的不错的,
拉登大叔的box2d教程算一个,基于as的,还去买了他的box2d编程指南
另外一个楠大在知乎发的一个链接,基于c++的,讲得很全面是真的,中英文都有,也有链接指向基于js的box2d,但是资料就几乎看不见了。

折腾了几天吧。。jeason97兄的EasyBox2d也快给我翻烂了哇。。。然而啥都看不懂23333333。。有box2d基础的朋友推荐去翻翻jeason97兄的EasyBox2d哇,基于cocoscreator的。。

关于box2d是什么,这里就不介绍了哇。我的理解仅停在百度百科的水平。。。。。

那么就讲讲如何导入box2dweb-commonjs到cocoscreator的项目吧。。

首先下载box2dweb-commonjs.js
有三个好去处
github搜box2dweb-commonjs
npm搜bbox2dweb-commonjs
论坛找jeason97兄的签名,直接去翻node_modules。。。如果看懂了97兄的EasyBox2d,那帖子后面的部分就不用看啦。。。good luck!

。。。github突然打不开了
那就用第二种方式
有装node的朋友直接打开控制台安装就行了
进到node的安装目录的node_modules目录下按住shift->鼠标右键->在此处打开命令行

输入 npm install box2dweb-commonjs --save 回车 等待安装完成 可能有警告 不管

然后目录下就能看到box2dweb-commonjs了

box2dweb-commonjs里面有4个文件

我猜只需要package.json和Box2dWeb-2.1.a.3.js
但是还是全部扔进项目好了
ok 新建一个空项目,然后到磁盘上项目的目录下

新建一个文件夹,重命名为node_modules

将之前的四个文件扔进来

好了,打开项目

新建一个场景和两个脚本(分别重命名为main,world_component,entity_component)

了解过box2d的朋友应该知道b2world和b2body 这里我就用world_component和entity_component来实现这两个内容
至于没有了解过box2d的朋友。。。求放过。。。我会去好好学习的。。。。

打开world_component我们来实现b2world

首先引用box2d

然后新建b2world

开启迭代运算

ok b2world完成 保存脚本扔到场景

nice 物理世界建立完成

继续实现b2body
打开entity_component

继续引用box2d(不用担心会重复引用,单例妥妥的)

开接口准备取b2world

定义几个常量和坐标转换方法
关于距离CCC用的是像素。box2d用的是米。我们用一米30像素来转,SCALE = 30。当然直接用一像素当一米来算逻辑上没啥错啊,但是我看大家都用的一米30像素
关于角度CCC用的是角度。box2d用的是弧度。我们用一对常量来装 DEGTORAD = Math.PI/180;RADTODEG = 180/Math.PI
关于坐标CCC用的是父节点的锚点,y轴向上。box2d用的是左上角原点,y轴向下 我单独封装了两个方法convertToWorld和convertToNode(worldPoint)

然后我们就创建b2body吧 我加了一些参数 角度45度啦,线速度vec2(1,0)啦,就是往右飞啦,角速度30啦,就会旋转啦(=。=然而我还只会玩这几个,求box2d老司机开车哇~~~)

然后呢,在update取得b2world计算到的最新位置和最新弧度,我们再把它转回CCC的坐标和角度,给到node 就完事啦

然后再加个点击的监听吧,我想看看碰撞啥啥的。。

nice,在场景新建两个单色精灵

把脚本挂上,两个精灵都挂上

调整场景中两个精灵的位置

entity_component添上world_component引用,所谓的数据驱动哇~

然后调一个world_component在层级的位置,保证b2World在b2Body之前创建

然后调一下重力吧,手残党截不到效果图,见谅QAQ

好了,效果如下

还记得我刚刚写的点击监听吗。

好啦,第三方box2d差不多就是这样导入CCC的啦,其他玩法请去jeason97兄的github找EasyBox2d吧!顺便能去学习一下插件的写法

先这样啦~

http://www.cocoachina.com/bbs/read.php?tid=458895&page=1&toread=1#tpc

源码放到网盘上去了
http://pan.baidu.com/s/1nvrMAZv,1

讚啊!強烈支持!!!

顶一个:2:

问一下node.js做的服务端可以用BOX2D吗

应该是可以的 毕竟node.js的包

正在用jeason1997的物理引擎,已经集成到插件和组件了,还可以。就是发布到原生apk无法运行,web页面没问题,这和jsb有关系么?

不大清楚,可以直接到群里问他

我也试了jeason1997的物理引擎,一切都很好。 就是打成原生包无法运行, 也不知道是什么原因。:10::10::10:

找到原因了,注释掉//window.CC_EDITOR = (cc.engine !== undefined);Physics.js中的第12行,原因不知道为什么。