box2D(转)

java 自己写的小球在一个矩形框内反弹程序 编写一个小游戏,让小圆球在画面移动,当小球碰到画面边框时,反射方向继续运动。 立即下载

转自:http://www.ityran.com/thread-650-1-1.html

第六章  fixture
6.1关于
记得,shape不了解body,并且shape可以在物理模拟中被单独使用。因此Box2D
提供了b2Fixture类将shape附属到body上,fixture持有以下:
         单个外形a singleshape
      ·broad-phaseproxies
      ·密度,摩擦,和恢复
      ·碰撞过滤旗帜
      ·返回父辈body的指针
      ·用户数据user data

     ·传感器旗帜sensorflag
具体将在以下章节中描述


6.2创建Fixture

fixture是通过初始化fixture定义并把定义传递给父辈body创建的。
     b2FixtureDeffixtureDef;
     fixtureDef.shape=&myShape;
     fixtureDef.density=1.0f;
     b2Fixture*myFixture =myBody->CreateFixture(&fixtureDef);
这创建了fixture,并把它附属到body上。你没必要存储fixture指针,因为
当父辈body被破坏时,fixture会自动被破坏。

你可以在父辈body上破坏fixture,你可以用这种方法来创建一个易碎的对象。
否则
youcanjustleavethefixture andletthebodydestructiontakecare
of destroyingthe attachedfixtures.
       myBody->DestroyFixture(myFixture);


密度

Fixture的密度可以用来计算父辈body的质量性能。密度可以为零或者为正数。
对所有的fixture,你应该使用相似的密度,这样可以提高堆的稳定性。

当你设置密度时,Body的质量是不可改变的。你需要访问ResetMassData才能
改变。
      fixture->SetDensity(5.0f);
      body->ResetMassData();


摩擦

摩擦用来保证对象像现实生活中一样移动。Box2D提供了静态和动态摩擦,但都
需要使用相同的参数。 在Box2D模拟中,摩擦需要非常准确,摩擦强度与正常
力量成正比(这就是所谓的库仑摩擦)。

摩擦参数通常是设置在0和1之间,但也可以是任何非负价值。将值设为0,摩擦关
掉。值为1,摩擦增强。当计算两个shape之间的摩擦力的时候,Box2D必须结
合两个父辈夹具的摩擦参数。
This isdonewith thegeometricmean:
     float32friction;
     friction=sqrtf(shape1->friction*shape2->friction);
如果一个夹具含有零摩擦,那么接触也会有零摩擦。


恢复Restitution

恢复用来使对象弹回。恢复值通常设置在0和1之间。考虑将一个球坠到桌子上,
9值意味着这个球不能返回。这就是所谓的一个非弹性碰撞。1值意味着这个球会
准确快速的反弹。这就是所谓的“完全弹性碰撞”。恢复则是组合使用下列公式:
      float32restitution;
     restitution=b2Max(shape1->restitution,shape2->restitution);

夹具通过携带碰撞过滤器的信息来帮助你阻止游戏对象之间的碰撞。
当一个形状发展多种接触时候,恢复会被近似模拟.这是因为Box2D使用一个迭
代求解器进行求解。当碰撞速度小的时候,Box2D也采用弹性碰撞。这是为了防
止抖动。


过滤

碰撞过滤可以帮助你防止fixture之间的碰撞。例如,你创建一个骑着自行车的
角色,你像让这个自行车和角色与地形碰撞,但是你不想让自行车与角色碰撞(因
为他们必须重叠), Box2D通过类别和分组支持这样的过滤碰撞。
Box2D支持16种碰撞类别,对于每一个夹具,你都能制定其属于哪一个类别。你
也可以制定这个夹具可以与哪种类型碰撞。例如,

你可以在一个多人游戏中指定,所有玩家之间不能互相碰撞,怪物与怪物之间不
能碰撞,但是玩家与怪物之间可以碰撞。Thisis donewith maskingbits.例
如:
    playerFixtureDef.filter.categoryBits=0x0002;
    monsterFixtureDef.filter.categoryBits=0x0004;
    playerFixtureDef.filter.maskBits=0x0004;
    monsterFixtureDef.filter.maskBits=0x0002;
    这是碰撞规则:

         uint16catA =fixtureA.filter.categoryBits;
         uint16maskA =fixtureA.filter.maskBits;
         uint16catB =fixtureB.filter.categoryBits;
         uint16maskB =fixtureB.filter.maskBits;

          if((catA &maskB)!=0&&(catB&maskA) !=0)
         {
            //fixtures cancollide
          }
    碰撞组让你指定一个整体分类指标。你可以让所有包含相同群指标的夹具永
远碰撞或者从不碰撞(negative index).集团指标通常用于一些相关的东西,像
自行车的一部分,在下面的例子中,夹具1和夹具2一直互相碰撞,但是夹具3和

夹具4却始终不碰撞。
         fixture1Def.filter.groupIndex=2;
         fixture2Def.filter.groupIndex=2;
         fixture3Def.filter.groupIndex=-8;
         fixture4Def.filter.groupIndex=-8;

     不同的群指标(groupindex)夹具之间的碰撞,会根据类别和屏蔽位(mask
bits)而被过滤。换句话说,集团过滤优先级高于类别过滤。
     注意在Box2D中的额外碰撞过滤,清单如下:
          静态body上的夹具只能与动态body上的夹具碰撞
          运动的body上的夹具只能与动态body上的夹具碰撞
          相同body上的夹具永远不能互相碰撞
          Youcanoptionallyenable/disablecollisionbetweenfixtureson
bodiesconnectedby ajoint.

有时候当一个fixture被创建的时候,你可能需要修改它的碰撞过滤。你可以用
b2Fixture::GetFilterData和b2Fixture::SetFilterData获取和设置一个已经
存在的fixture的b2Filter结构。要注意过滤数据不会增加或删除接触,直到
下一个时间步。


6.3 传感器

有些时候,游戏逻辑需要知道,什么时候两个fixture相交但不会碰撞。这将通
过传感器实现。传感器可以检测碰撞但不会产生碰撞反应。

你可以将任一shape标记为传感器,传感器可以是静态或动态的。记得,每个物
体上可以有多个shape,并且传感器和实体shape是可以混合的。传感器可以
是静态的或者动态的。记住每个body都可以有多个fixture并且也可以有任何
的混合传感器,和固体fixture。

传感器器不会产生触点,有两种方式获得感应器的状态;
     1. b2Contact::IsTouching
     2. b2ContactListener::BeginContactandEndContact   

另外,有下边一些概念要记住:

1,钢体

2,形状

3,约束

4,接触约束

5,关节

6,关节限制

7,关节马达

8,世界

一、创建一个世界的步骤:

1.先创建世界的AABB盒子:

     b2AABB worldAABB;

     worldAABB.lowerBound.Set(-100.0f,-100.0f);

     worldAABB.upperBound.Set(100.0f,100.0f);

2.再设置世界的重力失量

   b2Vec2 gravity(0.0f,-10.0f);

3.再设置是否使能世界体眠功能

   bool doSleep = true;

4.创建世界

  b2World World(worldAABB,gravity,doSleep);

二、创建一个物体的步骤:

1.创建物体定义

   b2BodyDef groundBodyDef;

2.设置定义物体的初始坐标

  groundBodyDef.position.Set(0.0f,10.0f);

3.使用世界创建这个物体

b2Body *groundbody = world.CreatBody(&groundBodyDef);

4.创建物体定义形状

b2PolygonDef groundShapeDef;
groundShapeDef.SetAsBox(50.0f, 10.0f);

5.将形状绑定到物体

groundBody->CreateShape(&groundShapeDef);

三、创建活动物体

1.先使用世界创建一个物体

b2BodyDef bodyDef;
bodyDef.position.Set(0.0f, 4.0f);
b2Body* body = world.CreateBody(&bodyDef);

2.设置形状,并设定物体密度和摩擦系数

b2PolygonDef shapeDef;
shapeDef.SetAsBox(1.0f, 1.0f);
shapeDef.density = 1.0f;  //密码,如果密度为0说明物体是固定物体
shapeDef.friction = 0.3f;  //摩擦系数
body->CreateShape(&shapeDef);
body->SetMassFromShapes(); //通过物体形状和密度设置物体质量

四、模拟

float32 timeStep = 1.0f / 60.0f;

int32 iterations = 10;

for (int32 i = 0; i < 60; ++i)
{
    world.Step(timeStep, iterations);
    b2Vec2 position = body->GetPosition();
    float32 angle = body->GetAngle();
    printf("%4.2f %4.2f %4.2f\n", position.x, position.y, angle);
}

说明一下,以上的代码是box2D的2.0版的,2.2.0版好像形状这一块改了一些东西,我这里找到的是2.0版的说明文档

避开这些坑!智鼎MAP性格测试高分指南(附互联网/国企/外企答题模板) 本文深入解析智鼎MAP职业性格测试的核心逻辑与常见陷阱,提供针对互联网、国企、外企三大行业的差异化答题策略与实战模板。帮助求职者理解测试本质,避开追求完美人设、忽视程度副词等心理陷阱,塑造与目标岗位高度匹配的职业画像,从而在招聘关键环节脱颖而出。 阅读详情

相关推荐

Isaac Sim 使用经验(配置要求,云服务器)

Google Colab及AutoDL都是在docker内运行,其中google colab并不支持docker指令,而依照AutoDL的相关文档,AutoDL并不直接提供docker指令。2. Google Colab/AutoDL 不支持图形化界面,图形渲染等任务,所以没有办法使用Omniverse Streaming进行直播,从而更好的对结果进行展示。对于第一点,或许存在直接手动复现镜像的可能,但是考虑到Isaac Sim/Isaac Lab由于比较新,可能不够稳定,因此还是按照官方文档进行部署。

weixin_44211433的博客 4587

box2d碰撞设定顶点

为了更好的模拟碰撞效果,需要设定精灵的顶点,这里的方案适用于规则图形。不规则图形用physicEditor更方便 b2Vec2 vertices[] = { b2Vec2(size ,-2*size), b2Vec2(2*size,-size), b2Vec2(2*size,size), b2Vec2(size,2

touchmybody的专栏 970

PaddleOCR多进程GPU推理实战:200万图片高效处理方案

本文详细介绍了PaddleOCR多进程GPU推理在高效处理200万张图片OCR任务中的实战方案。通过优化GPU利用率、多进程并发和关键参数调优,实现了从单进程3000张/小时到8进程3万张/小时的性能飞跃,为大规模OCR处理提供了可靠解决方案。

prometheus9mon的博客 261

分享使用Box2D和Cocos2D制作弹球游戏的方法

Box2D是一个非常强大的物理库,它与Cocos2D游戏编程库的结合非常适合开发iPhone游戏。我们可以就此进行各种尝试,例如使用它创造一款简单的游戏。 在本篇教程中我们将逐步创造一款简单的回力弹球游戏,包括进行碰撞检测,创造带有物理效果的弹跳球,通过碰触而移动球拍以及设置失败/胜利屏幕。 如果你是第一次使用Cocos2D或Box2D,你最好先了解Cocos2D或Box2D的相关教程

yingkoz的专栏 1636

STM32CubeMX Nucleo F767ZI 教程(1)

系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 例如:第一章 Python 机器学习入门之pandas的使用 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录系列文章目录前言一、pandas是什么?二、使用步骤1.引入库2.读入数据总结 前言 官网上买了个NUCLEO F767ZI 的开发板,144引脚的芯片,https://www.st.com/content/st_com/zh/products/evaluation-tools/prod

fafuwxm 2029

第三方系统(异构系统)基于token身份认证方式访问Ecology9的Restful接口Ecology9服务器配置部分

通过Token的认证方式调用Ecology9系统Restful业务接口服务器配置部分

svsou的专栏 2175

Cocos2dx之Box2D详解 设置物体回复力

Cocos2dx之Box2D详解 设置物体回复力. 密度和摩擦力比较容易理解,因为本身这两个属性不会跟其他物体有太多关联,而回复力则关系到物体之间的相互联系了,这是由于力的作用是相互的。同时因为力的作用是相互原理,作用力即等于反作用力。另一方面,根据测试结果可以知道,两个物体相碰,如果A物体的回复力为a,B物体的回复力为b。若二者的回复力不一样,则作用在二者身上的回复力为max(a, b),即使双方中有一方的回复力为0,这个结论依然成立。

Dionysos_lai的专栏 2487

手把手教你 Ubuntu 24.04 离线安装 Ollama

本文介绍 Ubuntu 下离线安装 Ollama 并使用 Ollama 部署 llama3.1-70b 大模型

举世誉之而不加劝,举世非之而不加沮,定乎内外之分,辩乎荣辱之境,斯已矣。 1018

Box2D 物理引擎入门

转自:https://www.jianshu.com/p/7681431618ec 一、什么是Box2D Box2D是一个强大的开源物理游戏引擎,用来模拟2D刚体物体运动和碰撞,由Erin Catto早在2007年用C++语言开发。 Box2D集成了大量的物理力学和运动学的计算,并将物理模拟过程封装到类对象中,将对物体的操作,以简单友好的接口提供给开发者。我们只需要调用引擎中相应的对象或函数,就可以模拟现实生活中的加速、减速、抛物线运动、万有引力、碰撞反弹等等各种真实的物理运动。(引用百度百科) 简

auccy的博客 7160

【项目实战】分布式日志系统 之 Exactly-once 语义:确保数据处理的精确性

在分布式系统的数据传输与处理中,是一种核心可靠性保障,其目标是确保数据“仅被处理一次”——既不重复(避免多次处理),也不遗漏(避免未处理)。与,二者共同保障数据处理的精确性。Exactly-once 语义是分布式系统中数据可靠性的高级目标,其核心通过“幂等设计”(解决重复问题)和“分布式事务”(解决原子性问题)实现。在实际应用中,常结合 At-Least-Once 语义与幂等性,或通过事务 API 与唯一 ID 去重的组合,平衡可靠性与系统性能。

奶爸的编程之路,也就一周冷个三天 167

路径规划 | 图解粒子群(PSO)算法(附ROS C++仿真)

粒子群算法(PSO)的基本思想是模拟鸟群觅食机制,将鸟类的觅食方向分为自我认知部分和社会部分,个体自主探索群体周围空间的同时,也随着群体的主流方向前进,不断逼近最优目标。本文详解PSO算法基本概念,并给出ROS C++实现加深理解

FRIGIDWINTER的博客 2616

Box2D一:基础知识

一、box2d基础知识 1、关于 Box2D 是一个用于游戏的 2D 刚体仿真库。从游戏的视角来看,物理引擎就是一个程序性动画(proceduralanimation)的系统,而不是由动画师去移动你的物体。 1、核心概念 刚体(rigid body) 一块十分坚硬的物质,它上面的任何两点之间的距离都是完全不变的。 形状(shape) 一块严格依附于物体(body)的 2D 碰撞...

weixin_30550081的博客 892

基于STM32L4XX、HAL库的 L76KB-A58定位模块驱动程序设计

/ 确保字符串终止。// 缓冲区溢出,重置。// 重置缓冲区索引。支持GPS、GLONASS、Galileo、北斗和QZSS多系统定位。case 1: // UTC时间。// 配置GPS模块(可选)// 查找GGA语句。// 启动UART接收。// USART1初始化函数。内置LNA和SAW滤波器。

zhusl6688的博客 349

android box2d运行小例子,配置eclipse【转】

本文是一篇在android上使用2D物理引擎的入门教程。 2D物理引擎能增强游戏世界中物体如多边形(箱子,三角形,多边形)的动作的真实感从而提高游戏质量。这个引擎通过用户设定的参数如重力,密度,摩擦,弹性等参数计算碰撞,角度,力和动力等。 引擎 有很多开源的2d物理引擎,其中最著名的有Box2D和Chipmunk。这里我们将用Box2D,因为他有更好的性能。很幸运...

鹿鸣天涯 2952

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

【转】Libgdx 物理引擎篇 Box2D

Box2D的是一个物理引擎库。他是一个用于2D的最流行的物理引擎库中的一个,被用到了许多语言,各种引擎中, 其中就包括咱们使用的这个Libgdx。 Libgdx中的Box2D实现了对于C++引擎的java包装,所以参考文档也可以直接使用C++版本的,official Box2D manual (PDF) 想获得更多的信息可以到Box2D的官网,box2d.org 获得信息。 这里我找到一个

evil_zj的博客 817

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

(转)Cocos2d-x加Box2D制作弹弓类游戏

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://mssyy2010.blog.51cto.com/4595971/847000 文章原版为英文版,地址链接在文章尾部给出。原文代码版本为object-c版,本文代码版本为C++版。对原文大部分内容进行了翻译,并将对oc版的说明更改为C++版。文章cocos2d-x版本co

gxj1680的专栏 1369

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

(转)使用Box2d物理系统以及在cocos2d框架添加Box2d物理系统lib包的方法

  Himi 原创,转载请注明!   原文地址:http://blog.youkuaiyun.com/xiaominghimi/article/details/6776096          上一节讲述了粒子的相关问题,当然啦,不示弱,今天继续将物理系统给大家进行简单的介绍和讲述;        首先先介绍,如何在cocos2d中加入box2d开发lib包,因为一般使用c...

tank2308635的专栏 167

【COCOS2DX-BOX2D游戏开发之三】 读取tiledmap的tmx阻挡(转)

http://blog.youkuaiyun.com/teng_ontheway/article/details/21704279 做一款像素游戏项目,需要读取TMX文件中的阻挡区域,生成box2d的fixture,来做阻挡 使用cocos2dx版本: 2.2.21.在tmx文件中创建一个”Physics”的层,用来存放编辑器中生成的各种阻挡块 编辑器中主要有polygone, polyline,box和

u012839224的专栏 1530

cocos2d-x学习笔记(20)-- box2d入门(转)

转自:http://www.2cto.com/kf/201209/154683.html cocos2d-x学习笔记(20)-- box2d入门         在看本次的文章前,最好先看我写的box2d物理引擎自学笔记整理1做做一些准备工作,以便更好地理解代码。 step1:创建coco2d-win32工程,注意在创建时记得勾上Box2D选项,命名为box2d; step2:在Hel

hhy018的专栏 615

(转)Andengine 学习系列5-使用物理系统BOX2D

l 创建物理世界 什么是物理世界,是对你游戏的物理模拟. 使用前确认你的引擎包含了下载的Physics Extension包. 创建物理世界的时候,有两类型供选择, 标准(Standard)和FixedStepPhysicsWorld. 区别? 后者多了个参数,指定了每秒更新固定次数. 下例指示了如何创建物理世界: private PhysicsWorld physicsWorld;

gxj1680的专栏 1307

转 mac下面xcode+ndk7配置cocos2dx & box2d的跨ios和android平台的游戏教程

原文地址:http://www.cnblogs.com/zilongshanren/archive/2012/03/04/2377873.html 首先,按照上一篇教程,搭建好mac下面的cocos2dx和android开发环境,注意配置好一些环境变量的值,比如$COCOS2DX_ROOT等。然后使用Xcode建立一个cocos2dx_box2d项目,命名为Box2DTest,如下图所示: ...

webghost70的博客 197

《割绳子》《蜡笔物理学》《Contre Jour》《顽皮鳄鱼爱洗澡》等游戏用Box2D引擎实现物理部分的方法(转)...

从最热门游戏排行榜和flash游戏网站上,你能看到什么?许多2D游戏都有非常出色的物理学和美术设计。现在我们要学习那些游戏使用了什么物理学以及如何用Box2D制作它们。 除了知道是“什么”,更重要的是知道“如何做”,首先,我想问读者一个问题:如果你想复制物理游戏的机制或行为,你需要什么技术和方法? 一年以前,我问了自己同样的问题,《6 Dimensions》就是问题的答案。这款游戏是一个创意的...

weixin_30530939的博客 906

【cocos2dx】秘籍

秘籍会长期不定时更新,有什么什么新鲜的干货,我会第一时间发上来1. int 转string 方法// 第一种 char *s; sprintf(s, "%d",20); // 第二种 std::string s = StringUtils::format("%d",20); // 第三种 std::string s = Value(20).c_str(); // 第四种 std::stri

shy 677

实习小白::(转) Cocos2d-x 3.0 开发(九)使用Physicals代替Box2D和chipmunk

1、概述 游戏中模拟真实的世界是个比较麻烦的事情,通常这种事情都是交给物理引擎来做。首屈一指的是Box2D了,它几乎能模拟所有的物理效果。而 chipmunk则是个更轻量的引擎,能够满足简单的物理需求,比如最常用的的碰撞检测等。这些引擎在使用的过程中有个令人讨厌的地方,它们参数太多了。 通常为了初始化一个简单的场景要写很多代码。在cocos2d-x 3.0版本中,出现了一个新类族—...

weixin_34355881的博客 95

BOX2D 自然的旋转到一个指定角度

最近在自己第一个游戏项目里面碰到一个看似简单却花了我2天时间才解决的问题 特地发出来分享一下 在BOX2D 中如何控制body 自然的旋转到一个指定角度? 这个问题在许多游戏中控制角度时都会遇到,但是在BOX2D中,你必须考虑到如果转动中与其他body碰撞等物理因素。 能够想到的解决方案有三种: 1 在update方法里不断更改body的角度,使他接近于要设定的角度。  b2...

weixin_30362233的博客 332

Zynq UltraScale+ MPSoC SYSMON温度电压监控实战:从裸机到Linux

片上系统(SoC)常集成内部ADC硬核用于健康监测,Xilinx Zynq UltraScale+ MPSoC的SYSMON就是这样的资源。它包含PS和PL两套独立监控单元,通过PMU或可编程逻辑IP访问,可采集结温、VCCINT等电源轨电压,并经10位ADC转换为数字量。SYSMON的价值在于无需外部器件即可实时感知芯片状态,在板级电源调试、产线测试和散热控制等场景中非常实用。针对该平台,从裸机BSP驱动到Linux下xilinx-ams设备树、IIO sysfs读取,再到阈值报警设置,都有成熟的工程路径

weixin_34253126的博客 334
上一篇: 关于cocos2d中的cpp宏(转)
下一篇: 在cocos2d中使用box2d物理引擎
woodcol
博客等级 码龄19年 288粉丝 429原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值