box2d之刚体,定制器笔记
刚体(Body):
通过世界创建的对象,物理引擎里面所有东西都是刚体
创建方式:
定义一个b2BodyDef,b2World调用createBody的方法传入此参数
定制器(Fixture):
带有形状,密度,摩擦力等属性
创建方式:
定义一个b2FixtureDef,调用刚体的createFixture方法为刚体创建定制器(相当于附加属性),每个刚体支持添加多个Fixture;
刚体的createFixture重载了两种模式,一种是b2FixtureDef作为参数,一种是shape作为参数,效果是一样的。
形状(shape):
刚体的形状
种类:
circle(圆形),Polygon(多边形),其他等等
基本上他们的范围是这样:world,body,fixture(刚体的多个属性)
tips:b2Vec2是2dx里面类似CGPoint的东西
具体看代码
1 //刚体 2 b2BodyDef testBodyDef; 3 testBodyDef.type = b2_staticBody; 4 testBodyDef.position.Set(0,0); 5 6 //底部的边缘线 7 b2EdgeShape testShape; 8 testShape.Set(b2Vec2(0,0), b2Vec2(s.width/PTM_RATIO,0)); 9 10 b2FixtureDef testFixtueDef; 11 testFixtueDef.shape = &testShape; 12 13 b2Body* testBody = world->CreateBody(&testBodyDef); 14 testBody->CreateFixture(&testFixtueDef); 15 16 //顶部边缘线 17 testShape.Set(b2Vec2(0,s.height/PTM_RATIO), b2Vec2(s.width/PTM_RATIO,s.height/PTM_RATIO)); 18 testBody->CreateFixture(&testFixtueDef); 19 20 //左边边缘线 21 testShape.Set(b2Vec2(0,0), b2Vec2(0,s.height/PTM_RATIO)); 22 testBody->CreateFixture(&testFixtueDef); 23 24 //右边边缘线 25 testShape.Set(b2Vec2(s.width/PTM_RATIO,0), b2Vec2(s.width/PTM_RATIO,s.height/PTM_RATIO)); 26 testBody->CreateFixture(&testFixtueDef); 27 28 //创建可运动的缸体 29 CCPoint ballPosition = CCPointMake(200, 100); 30 CCSprite* ballSprite = CCSprite::create("Ball.png"); 31 ballSprite->setPosition(ballPosition); 32 this->addChild(ballSprite); 33 34 b2BodyDef moveableBodyDef; 35 moveableBodyDef.type = b2_dynamicBody; 36 37 //设置刚体位置 38 //刚体相对于世界的位置,坐标转换为box2d里面的坐标 39 moveableBodyDef.position.Set(ballPosition.x/PTM_RATIO,ballPosition.y/PTM_RATIO); 40 //把精灵放到b2BodyDef的userData里面,在update里面刷新精灵位置 41 moveableBodyDef.userData = ballSprite; 42 43 b2Body *moveableBody = world->CreateBody(&moveableBodyDef); 44 45 //创建圆形小球 46 b2CircleShape testCircleShape; 47 //刚体和形状设置坐标的时候,选一个就ok 48 testCircleShape.m_p.Set(0,0); 49 float radius = ballSprite->getContentSize().width/(2*PTM_RATIO); 50 testCircleShape.m_radius = radius; 51 52 b2FixtureDef moveableFixtureDef; 53 moveableFixtureDef.shape = &testCircleShape; 54 moveableFixtureDef.density = 1.0f; 55 moveableFixtureDef.friction = 0.3f; 56 moveableBody->CreateFixture(&moveableFixtureDef);
update方法
1 void HelloWorld::update(float dt) 2 { 3 int velocityIterations = 8; 4 int positionIterations = 1; 5 6 world->Step(dt, velocityIterations, positionIterations); 7 8 //刷新精灵位置 9 for (b2Body* body = world->GetBodyList(); NULL!= body; body = body->GetNext()) 10 { 11 if ( NULL != body->GetUserData() ) 12 { 13 CCSprite* sprite = (CCSprite*)body->GetUserData(); 14 15 sprite->setPosition( CCPointMake( body->GetPosition().x * PTM_RATIO, body->GetPosition().y * PTM_RATIO) ); 16 sprite->setRotation( -1 * CC_RADIANS_TO_DEGREES(body->GetAngle()) ); 17 } 18 } 19 }
转载于:https://www.cnblogs.com/ziyouchutuwenwu/archive/2013/06/12/3132522.html
box2d之刚体,定制器笔记相关推荐
- 基于easyui开发Web版Activiti流程定制器详解(五)——Draw2d详解(一)
背景: 小弟工作已有十年有余,期间接触了不少工作流产品,个人比较喜欢的还是JBPM,因为出自名门Jboss所以备受推崇,但是现在JBPM版本已经与自己当年使用的版本(3.X)大相径庭,想升级也不太容易 ...
- 基于easyui开发Web版Activiti流程定制器详解(四)——页面结构(下)
题外话: 这两天周末在家陪老婆和儿子没上来更新请大家见谅!上一篇介绍了调色板和画布区的页面结构,这篇讲解一下属性区的结构也是定制器最重要的一个页面. 属性区整体页面结构如图: 在这个区域可以定义工作 ...
- Spring boot嵌入式Servlet容器定制器
修改Servlet配置 可以通过配置文件修改 也可以编写一个嵌入式Servlet容器定制器 EmbeddedServletContainerCustomizer 在自定义配置中,添加组件 Embedd ...
- 基于easyui开发Web版Activiti流程定制器详解(三)——页面结构(上)
上一篇介绍了定制器相关的文件,这篇我们来看看整个定制器的界面部分,了解了页面结构有助于更好的理解定制器的实现,那么现在开始吧! 首先,我们来看看整体的结构: 整体结构比较简单,主要包括三个部分: ...
- 基于easyui开发Web版Activiti流程定制器详解(一)——目录结构
题外话(可略过): 前一段时间(要是没记错的话应该是3个月以前)发布了一个更新版本,很多人说没有文档看着比较困难,所以打算拿点时间出来详细给大家讲解一下,由于本人平时要工作还要陪老婆和孩子而且还 ...
- 基于easyui开发Web版Activiti流程定制器详解(六)——Draw2d的扩展(三)
题外话: 最近在忙公司的云项目空闲时间不是很多,所以很久没来更新,今天补上一篇! 回顾: 前几篇介绍了一下设计器的界面和Draw2d基础知识,这篇讲解一下本设计器如何扩展Draw2d. 进入主题: 先 ...
- 【转】基于easyui开发Web版Activiti流程定制器详解(一)——目录结构
题外话(可略过): 前一段时间(要是没记错的话应该是3个月以前)发布了一个更新版本,很多人说没有文档看着比较困难,所以打算拿点时间出来详细给大家讲解一下,由于本人平时要工作还要陪老婆和孩子而且还经营着 ...
- Houdini>流体,刚体导出学习过程笔记
Houdini流体,刚体学习过程笔记 unity中流体案例项目连接: https://github.com/keijiro/HdrpVatExample 导出破碎FBX实现: 参考视频: https: ...
- 《Python cookbook》 “定义一个属性可由用户修改的装饰器” 笔记
看<Python cookbook>的时候,第9.5部分,"定义一个属性可由用户修改的装饰器",有个装饰器理解起来花了一些时间,做个笔记免得二刷这本书的时候忘了 完整代 ...
- 「SLAM」三维空间刚体运动名词笔记
主要内容:旋转矩阵.变换矩阵.四元数.欧拉角 3.1 旋转矩阵 3.1.1 点.向量和坐标系 刚体:三维空间中的物体,需要用三维坐标(xyz)和位姿(物体朝向)来描述 左/右手坐标系:将大拇指.食指. ...
最新文章
- 使用nginx分片功能提升缓存效率,支持可拖拽式播放视频
- css动画执行保持forwards,css3动画如何在动作结束时保持该状态不变
- php怎么表示合数,什么是合数 合数的定义
- 51nod 平均数(二分+树状数组)
- JAVA 大作业——DAY 3
- 猎隼涉密计算机安全,[原创]如何干掉《“猎隼”涉密计算机上网监察取证系统》...
- 临渊羡鱼 不如退而结网
- 微信公众平台 登陆php,javascript - 微信公众号开发,如何使用户保持登录状态
- android 广告库sdk,秒针移动广告投放Android SDK集成指南
- 使用valgrind测试gluster fuse内存泄漏问题
- 亚马逊多账号防关联的解决方式
- imageJ二次开发之旅 – imageJ开源项目介绍
- CSharp + OpenCvSharp实现医学图像拼接
- 一篇挺有意思的文章(转自CSDN)
- outlook2010 html签名,Outlook2010如何设置签名
- AdGuard4.0新版本广告拦截程序 新增功能介绍
- linux 防火墙 功能点,功能点(Funciton Point FP)估算法(三) 调整因子
- 修改服务器连接数,服务器修改连接数
- APP二维码微信扫描后无法下载 微信中无法下载APP的解决方案
- 数据结构与算法——从零开始学习(五)树和二叉树
热门文章
- python学习笔记之读取配置文件【转自https://my.oschina.net/u/3041656/blog/793467】
- 【转】C语言条件编译及编译预处理阶段
- [转]——软件开发人员如何成长
- linux中,使用cat、head、tail命令显示文件指定行
- 曲演杂坛--SQLCMD下执行命令失败但没有任何错误提示的坑
- Party (Standard IO)
- 单片机TM4C123学习(一):GPIO模块的应用
- 裁剪并获取固定大小的图片
- [CQOI2015]选数
- [bzoj4278][ONTAK2015]Tasowanie_后缀数组_贪心