让Box2D刚体无阻尼匀速运动
来源:互联网 发布:留学新加坡 知乎 编辑:程序博客网 时间:2024/06/06 00:40
Box2D物理引擎默认情况下,对世界b2World里的刚体都是模拟自由落体运动,并且因为摩擦力的影响,刚体会慢慢的停下来(在物理学上也叫做有阻尼运动)。今天我们来学习一下,让刚体不受摩擦力影响,无阻尼匀速运动下去。
首先我们要消除重力,让刚体不做自由落体运动。我们曾在Box2D自定义重力中,学习了如何消除重力。因为本节示例中的所有刚体都不受重力影响,所以直接在创建的b2World对象时,直接设置重力为零向量new b2Vec2(0,0)就可以了。
现在刚体可以老老实实的停在舞台上了,接下来我们要让它动起来。让刚体动起来,就是要让它有速度,可以通过b2Body的SetLinearVelocity()方法设置刚体的运动速度。这个用一个b2Vec2向量作为参数,这个向量包含了刚体速度的方向和大小。
现在问题也来了,刚体运动起来后,由于摩擦力的作用,速度会渐渐慢下来。你可以修改Box2D的源代码,取消摩擦力模拟,不过这是一个相当复杂的工作,因为一般人是很难弄懂Box2D里的底层算法的,也没有这必要。另外一个方法就是实时调整刚体的速度大小,注意这里指的的是大小,不包括方向,我们还是希望Box2D能帮忙的准确的完成反弹的。
调整向量的大小而不影响它的速度,可以将向量单位化,然后用Multiply()方法设置它的长度,Multiply()的参数即为要设置的向量长度。代码如下:
首先我们要消除重力,让刚体不做自由落体运动。我们曾在Box2D自定义重力中,学习了如何消除重力。因为本节示例中的所有刚体都不受重力影响,所以直接在创建的b2World对象时,直接设置重力为零向量new b2Vec2(0,0)就可以了。
现在刚体可以老老实实的停在舞台上了,接下来我们要让它动起来。让刚体动起来,就是要让它有速度,可以通过b2Body的SetLinearVelocity()方法设置刚体的运动速度。这个用一个b2Vec2向量作为参数,这个向量包含了刚体速度的方向和大小。
现在问题也来了,刚体运动起来后,由于摩擦力的作用,速度会渐渐慢下来。你可以修改Box2D的源代码,取消摩擦力模拟,不过这是一个相当复杂的工作,因为一般人是很难弄懂Box2D里的底层算法的,也没有这必要。另外一个方法就是实时调整刚体的速度大小,注意这里指的的是大小,不包括方向,我们还是希望Box2D能帮忙的准确的完成反弹的。
调整向量的大小而不影响它的速度,可以将向量单位化,然后用Multiply()方法设置它的长度,Multiply()的参数即为要设置的向量长度。代码如下:
完整的代码和注释如下:
0 0
- 让Box2D刚体无阻尼匀速运动
- Box2D C++ 教程-匀速运动
- Box2D C++ 匀速运动
- Box2D C++ 教程-匀速运动
- 让刚体听我的——鼠标拖动Box2D刚体
- Box2D C++教程10-匀速运动
- box2d刚体移动
- Box2D多边形刚体
- Box2D多边形刚体贴图
- box2d 刚体 编辑器
- Box2D创建多边形刚体
- [Box2D]让刚体听我的——ApplyForce、ApplyImpulse、SetLinearVelocity
- Box2D]让刚体听我的——ApplyForce、ApplyImpulse、SetLinearVelocity
- 【box2d-游戏开发】 box2d 创建刚体
- box2d刚体移动的方法
- Box2D中控制一个刚体
- 物理引擎Box2D之刚体
- [Box2D]五.和刚体交互
- STL中栈的使用
- ASP.NET MVC 3的概述
- IOS7新特性汇总
- STL中队列的使用
- 关于使用 ASIHTTPRequest URL中文参数乱码问题
- 让Box2D刚体无阻尼匀速运动
- 我的spfa (= =)!
- socket模拟http请求
- 利用深度优先搜索做的随机生成地图的迷宫小游戏
- python 去除html标签函数
- squashfs make
- 使用笔记本分享热点点击命令出现,“netsh”不是内部或外部命令,也不是可运行的程序或批处理文件解决办法
- iOS中常用的四种数据持久化方法简介
- poj 1901 跳蚤 扩展欧几里得定理和容斥原理的应用