本来是打算和前面一篇混在一起的,后来想了下,两个完全不相干的主题,放在一起不好,而且既然我的文章产出率这么低,不如拆成2篇,混一混更新频率……
首先就是,cocos creator在1.5的版本加入的box2d。
然后,我试着把跑酷游戏切换到box2d版本,效果感觉很糟,由于一些原因,图片先不放了。
后来又折腾了几天,打算把boo转为box2d试试。
不过,这里面坑太深了,按照官方的文档,及示例,看的云里雾里。
首先,你要了解box2d的机制,其次,你要了解cocos对box2d进行加工的逻辑……
本身camera就是一个简单的节点移动,很多用户大概要的是类似一个view框的东西。后来一看解释,官方的camera依然是节点移动。『那要你何用?』于是继续之前自己写的camera。
最后,我才明白,为什么box2d和camera组件是一起上的。
因为box2d的坐标系和cocos不一样……节点捆绑的逻辑也不同……
在cocos creator里制作box2d的组件还挺简单的:
在节点里,原先添加碰撞组件的地方,改成物理就好了。
其他的参数去官网查下,试了下,基本上就用Dynamic和Static就行了。
另外需要碰撞前开启下
var physicsManager = cc.director.getPhysicsManager();
physicsManager.enabled = true;
box2d里的重力默认是320/s
不需要重力或者想要修改这个值的话,设置
physicsManager.gravity = cc.v2();
另外,碰撞框的调试,只要开启这项就够了,其他的自己看情况改吧:
physicsManager.debugDrawFlags =
// 0;
// cc.PhysicsManager.DrawBits.e_aabbBit |
// cc.PhysicsManager.DrawBits.e_pairBit |
// cc.PhysicsManager.DrawBits.e_centerOfMassBit |
// cc.PhysicsManager.DrawBits.e_jointBit |
cc.PhysicsManager.DrawBits.e_shapeBit
;
想要鼠标拖拽效果的:
this.addComponent(cc.MouseJoint);
因为box2d是套完整的物理引擎,所以,基本上这些填好,然后在creator里把对应的物理组件加上,就可以了,没什么代码要写的。
当然,之后有其他的效果实现还是需要代码。不过省了自己写物理效果的一大段js。
另外,camera要配套使用,box2d里的物理刚体是不会随着父节点移动的。同时上线的camera里帮忙转换了坐标。用法:
在一个空节点下添加camera组件
camera里想要移动的节点填在targets里,然后自己再额外写个脚本,视角锁定在主角身上,就是脚本里的target:dolo……
话说这个都什么玩意……
总之不这么做的话,你自己就要自己去转换坐标,蛋疼。
另外官方对于targets和target的层级似乎有要求,他们需要在同一层级,但是我试了一下,把主角放在targets节点里,可以正常运行,放在外面不行。
最后放个demo吧,其实还是在犹豫用box2d还是自己之前写的那套物理规则。
『柯南』里有句台词:
『人们不是常说,祭典前的准备工作,比祭典本身更快乐吗?』
因为在准备祭典的时候,可以和伙伴一起探讨,对未来的祭典举行充满期待,抱有希望是件很好的事。
然而我现在一点都没有感觉快乐,大概是因为没法开展祭典吧,也就是说现在的快乐值是5,而真正开始祭典的时候,快乐值是3,所以祭典之前比较快乐…………
原文链接放box2d版的。http://ccx01.com/game/dolo_box2d/
之前一版 http://ccx01.com/game/boov3/