Cocos Creator Box2d 学习笔记-02
来源:互联网 发布:软件开发招标书 编辑:程序博客网 时间:2024/05/18 02:29
1 创建一个world
每个 Box2D 程序都将从一个世界对象(world object)的创建开始。这是一个管理内存,对象和模拟的
中心。
var Box2d = require("box2dweb-commonjs");var gravity = new Box2d.b2Vec2(0, -10);var doSleep = true;this.myWorld = new Box2d.b2World(gravity, doSleep);
这里与box2d c++ 中文手册中创建世界对象不一样,box2d c++ 中文手册会先指明一个世界包围盒b2AABB,但在这 “box2dweb-commonjs” 中没有设置,我看了源码如下:
b2World.prototype.b2World = function (gravity, doSleep) { this.m_destructionListener = null; this.m_debugDraw = null; this.m_bodyList = null; this.m_contactList = null; this.m_jointList = null; this.m_controllerList = null; this.m_bodyCount = 0; this.m_contactCount = 0; this.m_jointCount = 0; this.m_controllerCount = 0; b2World.m_warmStarting = true; b2World.m_continuousPhysics = true; this.m_allowSleep = doSleep; this.m_gravity = gravity; this.m_inv_dt0 = 0.0; this.m_contactManager.m_world = this; var bd = new b2BodyDef(); this.m_groundBody = this.CreateBody(bd); }
暂时还没有发现哪里设置世界包围盒(AABB), 但是world中后QueryAABB方法,这个有点疑惑,望各位指正。
2 创建一个物体
物体通常由以下步骤来创建:
- 使用位置(position),阻尼(damping)等定义一个物体
- 使用世界对象创建物体
- 使用几何结构,摩擦,密度等定义形状
- 在物体上创建形状
2.1 定义一个物体
var bodyDef = new Box2d.b2BodyDef();bodyDef.type = Box2d.b2Body.b2_dynamicBody;//动态物体bodyDef.position.Set(0, 0);
物体的定义(bodyDef)会有这些属性:质量、 位置和角度、 阻尼、 休眠参数和子弹参数
2.2 创建一个物体
this.myBody = this.myWorld.CreateBody(bodyDef);
2.3 使用几何结构,摩擦,密度等定义形状
形状就是物体上的碰撞几何结构。
另外形状也用于定义物体的质量。也就是说,你来指定密度,Box2D 可以帮你计算出质量。
形状具有摩擦和恢复的性质。形状还可以携带筛选信息,使你可以防止某些游戏对象之间的碰撞。
形状永远属于某物体,单个物体可以拥有多个形状。形状是抽象类,所以在 Box2D 中可以实现许多类型的形状。
var fixtureDef = new Box2d.b2FixtureDef();fixtureDef.shape = new Box2d.b2PolygonShape();//多边形fixtureDef.shape.SetAsBox(300, 400);
在box2dweb-commonjs中形状的属性有:摩擦和恢复(friction)、密度(density)、形状(shape)、筛选(filter)、传感器(ssSensor)和恢复(restitution)
2.4 在物体上创建形状
this.myBody.CreateFixture(fixtureDef);
3. 刷新world
在update中添加如下方法,和与工程中的节点想关联起来,你会看见节点移动开始移动起来
update: function (dt) { this.myWorld.Step(dt, 10, 10); this.myWorld.ClearForces(); //this.bgNode就是场景中显示的原件 this.bgNode.setPosition(this.myBody.GetPosition()); //cc.log(this.circleBall.GetPosition()); },
0 0
- Cocos Creator Box2d 学习笔记-02
- Cocos Creator Box2d 学习笔记-01
- Cocos Creator 视频学习笔记
- cocos creator学习笔记2017.2.9
- cocos creator学习笔记2017.2.14
- cocos Creator学习 二
- cocos creator 学习总结
- Cocos Creator学习笔记1——LabelLocalized优化
- cocos creator学习笔记2017.2.10(node.Js,网络篇)
- cocos creator学习笔记2017.2.10(二)
- Cocos Creator 学习笔记——获取时间
- cocos Creator 学习(二)
- cocos Creator 学习(三)
- cocos creator 学习(五)
- cocos creator
- cocos Creator
- cocos creator学习(十四) websocket、onfire
- box2d 学习笔记
- 下面要看的文件列表
- iOS Swift NSNotificationCenter 通知
- 简单的Mysql数据库备份和同步脚本
- (OK) Linux 平台 CUST.zip 制作方法
- 每天一个linux命令(52):ifconfig命令
- Cocos Creator Box2d 学习笔记-02
- 程序员绩效之谜
- 【性能优化】性能优化---Hierarchy Viewer的使用
- linux test 命令
- 精进:如何成为一个很厉害的人
- 移动设备分辨率与原型尺寸对照表
- 常用正则表达式大全 (转)
- Mac系统VirtualBox中CentOS启用共享文件夹
- AES 密码加密保存