Box2d 学习

.  Testbed 项目:
Testbed 是 Box2d 源码里包含的一个例子程序。Testbed 封装了界面显示、游戏循环等部分的代码。添加新的例子的时候,只需要关注与 Box 有关的部分,运行时候的效果会自动绘制到界面上。 添加新例子的方法:
. 创建一个 Test 类的子类;
. 把这个子类的类名和 Create 函数放到 TestEntries.cpp 的 g_testEntries[] 数组中;
. 在构造函数中创建 b2Body 等对象,完成 b2World 的创建工作;
. 复写 Keyboard 函数,监听键盘事件; class FooTest : public Test
{
public:
FooTest()
{
// 创建 body, Fixture 等
b2BodyDef myBodyDef;
myBodyDef.type = b2_dynamicBody; myBodyDef.position.Set(, );
m_body = m_world->CreateBody(&myBodyDef); b2PolygonShape polygonShape;
polygonShape.SetAsBox(, ); b2FixtureDef myFixtureDef;
myFixtureDef.shape = &polygonShape;
myFixtureDef.density = ; m_body->CreateFixture(&myFixtureDef);
} void Keyboard(unsigned char key)
{
// 键盘事件
switch(key)
{
case 'w':
m_body->ApplyLinearImpulse(b2Vec2(,), m_body->GetWorldCenter(), true);
break;
default:
Test::Keyboard(key);
}
} void Step(Settings* settings)
{
// 不知道干啥用
Test::Step(settings);
}
static Test* Create()
{
return new FooTest;
}
private:
b2Body* m_body;
}; . Body:
Box2d 中的 Body 没有形状大小,不能碰撞,只具备质量(由 Fixture 的 shape 和 density 决定)、速度、位置这几个基本属性;
Body 可以接收力和冲量的作用;
可以附着 Fixture ,附着后才具备形状大小,可以碰撞反弹 Body 有 种:
static: 没有速度,不接受力和冲量的作用;
dynamic: 有速度,可以接受力和冲量的作用;
kinematic: 有速度,不接受力和冲量的作用。与 dynamic 碰撞不会改变原速度,与 static 碰撞不会有反应 创建 Body:
b2BodyDef myBodyDef;
myBodyDef.type = b2_dynamicBody;
myBodyDef.position.Set(, );
m_body = m_world->CreateBody(&myBodyDef); . Fixture:
Fixture 描述了物体的 形状、密度、弹性、摩擦因数;
两个物体发生碰撞时的反应由其 Fixture 决定;
一个 Body 可以有多个 Fixture ,Body 的重心受多个 Fixture 的影响;
Fixture 中的 shape、destiny 等都是以标准单位 米、千克每平方来作为单位的,设定的时候可以参考实际的情形; Fixture 有四种 shape :
b2PolygonShape: 多边形
b2CircleShape: 圆形
b2EdgeShape: 线
b2ChainShape: 链(几条线连在一起) Friction 摩擦因数:
friction 值的范围为 到 ,为 表示完全没有摩擦,为 并不意味着不存在滑动;
当两个物体发生摩擦时,摩擦的大小取决于比较小的 friction Restitution 弹性:
restitution 值的范围为 到 , 为 表示完全没有弹性,碰撞时所有的能量将全部被反弹回去;
当两个物体发生碰撞时,碰撞的结果取决于比较大的 restitution 创建 Friction:
b2PolygonShape polygonShape;
polygonShape.SetAsBox(,); b2FixtureDef myFixtureDef;
myFixtureDef.shape = &polygonShape;
myFixtureDef.density = ;
myFixtureDef.friction = ; // 摩擦因数为 0
myFixtureDef.restitution = ; // 弹性因数为 1
m_body->CreateFixture(&myFixtureDef);

Box2d学习的更多相关文章

  1. Box2D学习blog

    http://www.ladeng6666.com/blog/category/box2d/

  2. Cocos2d-x 3.1.1 学习日志10--一进来你就知道了Box2D了

    error LNK2019: 无法解析的外部符号 "public: __thiscall b2Draw::b2Draw(void)" (? ?0b2Draw@@QAE@XZ),该符 ...

  3. COCOS2DX学习之Box2d物理引擎使用之------动态物体的创建

    1.创建一个物理世界 首先要引入一个头文件#include "Box2D\Box2D.h" 之后利用b2word创建一个对象,而且指定这个物理世界中的加速度方向. word = n ...

  4. 基于cocos2d-x-3.2学习Box2D(一)

    cocos版本号:cocos2d-x-3.2 环境:Win7+VS2013 因为一些太底层的实现我如今的能力学习不到,仅仅能做一些简单的笔记,供以后翻阅.假设别人可以得到帮助,莫大的荣幸. 一.创建世 ...

  5. Cocos2d学习之路五(Box2d使用CCPhysicsSprite时编译不通过解决方法)

    cocos2d使用box2d引擎,在使用CCPhysicsSprite添加精灵的时候会出现编译不通过错误. 需要注意以下几点: 1.sprite.position=ccp(p.x,p.y);这行代码一 ...

  6. libgdx学习记录21——Box2d物理引擎之碰撞Contact、冲量Impulse、关节Joint

    Box2d中,物体可以接受力(Force).冲量(Impulse)和扭矩(Torque).这些物理元素都能改变物体的运动形式,并且默认都会唤醒物体,当然只是针对动态物体. 力是一个持久的效果,通过Bo ...

  7. libgdx学习记录18——Box2d物理引擎

    libgdx封装了Box2D物理引擎,通过这个引擎能够模拟物理现实,使设计出的游戏更具有真实感. libgdx中,Box2d程序的大概过程: 1. 创建物理世界world,并设置重力加速度. 2. 创 ...

  8. Box2D 一、学习资料(库、pdf)

    参考: 在Egret中使用Box2D --- 拉小登   (提供了box2d的ts和dts文件下载,以及egret中第三方库配置教程) Egret中成功集成Box2D --- Egret论坛水友 bo ...

  9. 强化学习-linux安装gym、atari和box2d环境

    安装gym和atari环境 pip3 install gym pip3 install gym[atari] pip3 install gym[accept-rom-license] 安装box2d环 ...

随机推荐

  1. java并发编程:进程和线程

    java并发编程涉及到很多内容,当然也包括多线程,再次补充点相关概念 原文地址:http://www.cnblogs.com/dolphin0520/p/3910667.html 一.操作系统中为什么 ...

  2. OS X 使用技巧——在Finder窗口标题栏上显示路径

    Finder窗口默认显示当前文件夹的名称或当前所在的模式(例如AirDrop).如果想要显示路径(用User/[当前用户账号名称]/Documents 替代以前显示的Documents),打开终端并运 ...

  3. C#读书笔记之并行任务

    这两天遇到一个多线程任务优化的问题,现在解决了,把心得用例子的形式记下来. 假设有四个任务: 任务1:登陆验证(CheckUser) 任务2:验证成功后从Web服务获取数据(GetDataFromWe ...

  4. IEEE802.11数据帧在Linux上的抓取

    IEEE802.11数据帧在Linux上的抓取终于得到了梦寐的<802.11无线网络权威指南>,虽然是复印版本,看起来也一样舒服,光看书是不行的,关键还是自己练习,这就需要搭建一个舒服的实 ...

  5. hdu 4046 Panda 树状数组

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4046 When I wrote down this letter, you may have been ...

  6. 迭代启发式搜索 IDA*

    本章聚集了一些做了的迭代启发式搜索的题目 为什么只打了迭代启发式搜索? 因为它很好打,有些类似迭代的时候加的最优化剪枝 [因为这个最优化剪枝其实就是你算的估价函数了...] BZOJ 1085 骑士精 ...

  7. 持久化消息队列memcacheq的安装配置

    MemcacheQ 是一个基于 MemcacheDB 的消息队列服务器. 一.memcacheq介绍 特性: 1.简单易用 2.处理速度快 3.多条队列 4.并发性能好 5.与memcache的协议兼 ...

  8. Codeforces Round #243 (Div. 1) A题

    http://codeforces.com/contest/425/problem/A 题目链接: 然后拿出这道题目是很多人不会分析题目,被题目吓坏了,其中包括我自己,想出复杂度,一下就出了啊!真是弱 ...

  9. Mac中安装maven3.2.1

    Mac中安装maven3.2.1 原文链接:http://blog.csdn.net/f_zongjian/article/details/24144803 本机OS X:10.9,未安装XCode, ...

  10. Css选择器的优先级

    a = 行内样式style. b = ID选择器的数量. c = 类.伪类和属性选择器的数量. d = 类型选择器和伪元素选择器的数量. 选择器 等级(a,b,c,d) style=”” 1,0,0, ...