关于BOX2D的那些事儿(6)
2011-10-14 10:55
288 查看
motorTorque或motorForce表示现在的扭矩或应力,Revolute Joint就是扭矩,因为他共用一个锚点,只能沿这锚点转动,而Prismatic Joint支持基于轴的移动,所以他是应力。 motorSpeed表示的是把这应力或者扭距应用到刚体上的数值增减程度。(仅当参考,事实是你加大减少这个值会让游戏数值瞬间变化量变多或变少,理解就行) enableMotor是决定使用不使用Motor。 enableLimit决定上下限(角度或者长度)是否有用。 在SliderCrank这个例子中,先是定义了一个刚体,并用这个刚体和地面创建了一个Revolute Joint,这个Revolute Joint的motorTorque值设为一定值,让这个刚体持续转动,当然你的速度越快,转动就越快。这个刚体又用Revolute Joint连接了一个刚体,但这个Revolute Joint无效了motor,所以这个刚体只能靠其他刚体让他移动。又用Revolute Joint连接了活塞刚体,同样是无效了motor,之后创建了Prismatic Joint来连接你的活塞和地面,给定了应力,所以这个应力就使得上面掉下来的块上升。 注意他的相关坐标设置。 总结一下,这里真正提供动力的有两个东西,一个是活塞,他是给下面掉下来的块提供力量,另一个是最持续转动的刚体盒子,他供给活塞以及他上面的块能量。 MotorsAndLimits这个例子同样很好理解,除了对motor的应用外,还使用了enableLimit值,这个值是用来做什么,上面说过了,是用来决定在JointDef中定义的相关上下限是否起效。 试着改动相关数据对你理解更有效。 十二、CollisionProcessing CollisionProcessing这个例子是有关于Contacts的使用。这个东西是Box2D用来在形状间检测碰撞的,有很多不同种类的 Contacts,比如说负责圆和圆碰撞的,负责圆和多边形碰撞的。这些其实你都没有必要去了解它,你只要会应用你最需要的就行了。 这里你最起码需要了解的几个概念: Contact:就是用来管理碰撞的 contact manifold:这个东西就是碰撞时候产生的,是一个由碰撞点组成的矢量线段。 contact point:碰撞点 在例子CollisionProcessing中的Step部分,先从世界的Contacts表里取出你需要的连接,然后取得contact manifold的数量,如果有连接,然后再做出相应的处理。 b2Contact的结构: 重要的属性: 发生碰撞的两个形状 b2Shape* m_shape1; b2Shape* m_shape2; contact manifold的数量 int32 m_manifoldCount; 组合摩擦力和弹性系数 float32 m_friction; float32 m_restitution; 重要的成员函数: 取得相应的contact manifold virtual b2Manifold* GetManifolds() = 0; 取得contact manifold数 int32 GetManifoldCount() const 取得下一个Contact b2Contact* GetNext(); 取得这个Contact的两个形状 b2Shape* GetShape1(); b2Shape* GetShape2();
相关文章推荐
- 关于BOX2D的那些事儿(5)
- 关于BOX2D的那些事儿(3)
- 关于BOX2D的那些事儿(2)
- 关于BOX2D的那些事儿(3)
- 关于BOX2D的那些事儿(4)
- 关于AJAX异步请求的那些事儿(2)
- box2d关于投影预瞄准的算法推演过程
- 关于软件工程的那些事儿————《人·绩效·职业道德》和《一个程序员的生命周期》读后感
- 关于z-index的那些事儿
- 关于密码的那些事儿
- 关于职业计划的那些事儿
- 关于大学那些事儿
- 关于屏幕那些事儿
- 滴滴出行技术总监:关于技术选型的那些事儿
- 关于使用ubuntu的那些事儿
- 关于Hive数据仓库的那些事儿(一)模式设计
- 关于FIM和Oracle的那些事儿
- 关于AutoLayout(自动布局)那些事儿
- 关于IT与小资那些事儿 - IT苦与乐
- 关于推送,你可能忽略的那些事儿