Box2D学习指南

windows10编译Box2D源文件 最近突然看到一个Box2D的四角机器人演示,觉着挺好玩,于是决定自己也动手做一个。在使用Box2D之前需要编译Box2D的源文件,生成BoxesD.lib供编程使用。编译的步骤大致如下: 一、进入box2D作者的github,下载源码。 https://github.com/erincatto/Box2D   二、下载了box2D源码之后,需要使用cmake生成vs工程文件,点击下面的 阅读详情

1.入门知识

1.0 下载代码并且运行。我尝试很久在iphone上运行Box2D的Testbed,失败。最后只能是在Mac上运行。但这个已经给人一个很直观的效果。

1.1 阅读官方文档,不好懂,读一遍知道一些概念就好了,以后就留着它用来参考好了。同时阅读源代码中带的HelloWorld。

1.2 一个不错的入门介绍,比官方文档好多了。http://www.iforce2d.net/b2dtut/introduction

1.3 需要弄懂一些物理知识,这个时候可以充分发挥wiki的作用,如冲量(Impulse),作用力(Force),加速度(Acceleration)等等。这些概念很重要,如果你想要更好的利用Box2D。譬如在http://www.iforce2d.net/b2dtut/forces这里讨论冲量和作用力的时候,提到如果对一个物体作用相同的冲量和作用力,会发现前者的速度要快。为什么呢?因为I=F*dt, F=m*a, 对于利用冲量ApplyImpulse来说考虑的是合力,而用力ApplyForce则是一个作用力,而综合的运动效果还需要考虑重力。如果ApplyForce的时候,把重力设置为0,就会发现冲量和作用力的效果是一致的。


2. 深入

2.1 需要阅读Testbed里面的源代码。

譬如在我的手机应用当中,考虑用鼠标拖动一个物体,然后对这个物体要跟着鼠标运动。显然这个物体的显示是一个图片,而背后才是一个看不见的Box2D world,因为Box2D是不负责渲染,也就是左图。在开始的时候,鼠标拖动物体,我就尝试着讲可见的图片移动到鼠标位置,同时将对应的Body也移动到相同位置,当然这个时候我不调用world->step,也就是不让world里面的东西发生任何物理改变。当松开鼠标的时候,再正常调用world->Step方法以促使发生物理变化。可以发现基本上还是正常的。但是问题在于当你移动物体的时候,没有办法做到物体本身绕着鼠标点击的位置进行绕动。而在看Testbed里面的例子会发现,在移动物体的时候会出现刚才说的绕动现象。为什么呢?问题就在于即便在鼠标移动状态,物理世界也是在发生变化,而在调用world的Step方法之后立即重绘图形界面,这样就可以实现绕动。

抛开细节最关键的一点就是,在运动过程中,图形界面的渲染是基于物理世界的变化,而不是由图形渲染影响物理世界。

2.2 很多图像不是方或者圆的,也不是一个简单的多边形,而可能是多个多边形的组合。这个时候你可能需要用到这个工具Box2DEditor。它可以根据你画的边界自动分解生成多个多边形。然后根据生成的文件解析加载到应用中。具体说来,生成文件最好是选择xml或json,然后自己实现解析代码(如果是java的话可以用源代码自带的)。譬如我用c++就是读入文件里面的多边形数据,利用每个多边形为Body创建一个Fixture(一个Body可以有很多Fixture),这样也就构成了我们想要的不规则的Body。

2.3 最后的一个问题是:不知道为什么我的应用中,物体可以嵌入到地面,譬如我的地面是这么个形状 \__/  ,在凹槽中间放置一个小车,拖动鼠标的时候,小车一部分可以越过斜边,这个时候小车就卡住不动了,然后界面出现闪烁。但是在Testbed里面是不能越过斜边的。这个问题解决起来居然很简单。我仔细比对了一下我的和Testbed里面Test.cpp的代码,发现Test.cpp的MouseDown里面,有下面的代码:

b2MouseJointDef md;

md.bodyA = m_groundBody;

md.bodyB = body

其中m_groundBody的创建为:

b2BodyDef bodyDef;

m_groundBody = m_world->CreateBody(&bodyDef);

而在我的代码里面,把m_groundBody理解为真正的groundBody,也就是四周的static ground,如上面描述的凹槽地面。但是你可以发现在MotorJoint.h中的ground实际上是另外i定义的,并不是这个m_groundBody。于是把代码改成跟Test.cpp里面的一致,问题就解决了。原因不明 :)


cocos2dx 3.x使用Box2d 众所周知cocs2dx 3.x中有个Physics的封装,本意可能是想同时封装chipmunk和box2d,但为什么只实现了chipmunk就不管box2d了呢。。 最近尝试了一下,chipmunk问题很多,只要PhysicsBody速度够快,即便是和staticBody或Edge碰撞都可能发生穿透,而且即使没有发生穿透,如果持续给一个body设置速度,它就会无视碰撞,堂而皇之的穿透出去。。 阅读详情

相关推荐

信捷CODESYS平台伺服电机转矩控制模式应用与切换

信捷CODESYS二次开发软件:XS Studio 在运动控制中的转矩控制案例

weixin_64614866的博客 1万+

(老文章)Box2D新手入门顺阶教程

注意: 本教程只适用于BOX2D 2.0以下版本,由于2.0版API的改动,所以有部分代码会并不适用.但是主要思想还是一样的. 一、 HelloWorld 开始之前,我假想你已经看过了HelloWorld的源代码,并看了用户手册中关于HelloWorld的相关说明,而且已经大致明白了大多数内容。 其实HelloWorld已经用极其简单的语言向你描述了Box2D物理引擎的运作机制,我们可以归纳一下

步行者,一步一个脚印 1万+

【论文阅读笔记】One Shot 3D Photography

论文主页:https://facebookresearch.github.io/one_shot_3d_photography/ 代码地址:https://github.com/facebookresearch/one_shot_3d_photography   该3D照片方向,由于刚入门,所以会倾向于翻译文章。每个操作上的选择,及为什么不进行另外操作的原因都如数放上。 论文小结   本作的工作是从单张RGB图片生成一个移动视角的3D照片。   其管道大致如下: 由RGB图像通过单目深度估计网络估计深度图

时光机 °的博客 1839

Box2D 物理引擎入门

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

auccy的博客 7160

Apollo学习笔记(4)坐标系

百度Apollo项目用到了多种坐标系,其中帮助文档提及的坐标系包括: 全球地理坐标系(The Global Geographic coordinate system ) 局部坐标系—东-北-天坐标(The Local Frame – East-North-Up,ENU) 车身坐标系—右-前-天坐标(The Vehicle Frame —Right-Forward-Up,RFU) 车身坐标系—前-左-天坐标(The Vehicle Frame —Front-Left-Up,FLU) 还有一种Frenet坐标

qq_24649627的博客 5798

绕过ROS2!在RDK X5上直接用Python调用海康相机C++ SDK的避坑指南

本文详细介绍了在RDK X5上绕过ROS2,直接使用Python调用海康相机C++ SDK的轻量化方案。通过Cython构建Python绑定,提取海康相机SDK核心组件,实现高效图像采集。文章涵盖环境准备、Cython接口设计、编译系统配置及性能优化技巧,特别适合ARM64平台开发者。

weixin_33712987的博客 250

Box2D教程1-创建碰撞世界

Box2D教程1-创建碰撞世界 Box2D教程2-鼠标交互 Box2D教程3-刚体绑定外观 Box2D教程4-复杂刚体的复杂外观 Box2D教程5-碰撞检测 Box2D是一个比较优秀的二维物理引擎,由C++编写,后由Alchemy转换成AS3。这个教程主要介绍如何创建物理世界、刚体、及其基本形状,即Box2D的Hello world。Box2D的物理世界通常包括这样几个对象:worl...

weixin_30437847的博客 273

C语言—for循环打印矩形,正三角形,倒三角形,九九乘法,等腰三角形,倒着的等腰三角形(简易版代码)(重点考察for循环嵌套)

本章节教大家如何利用for循环打印正三角形,倒三角形,九九乘法表及等腰三角形(简易版代码)说明:1、循环语句的循环体内又包含另一个完整的循环结构,称为循环结构的嵌套。内嵌的循环语句中还可以再嵌套循环结构,这样就形成多重循环结构的嵌套。2、for 语句、while 语句和 do-while 语句都允许嵌套。三种循环语句可以相互嵌套。3、内层的循环语句必须完全被包含在外层的循环体中,不能发生交叉。

m0_63501145的博客 1695

Box2D入门(v2.0)

现在网上关于as3的物理引擎真是不少,比较之后发现,在开源引擎当中Box2D算是比较不错的了,只可惜他的结构比较复杂,而且国内网站关于Box2D方面的教程真是少的可怜。因为我知道这个最早是c++上面的2D引擎,所以我找到了http://www.box2d.org/manual.html网址,经过几天的研究,总算是入门了,下面我会系统的针对官网给出的HelloWorld程序进行讲解,把个人心得分享给

Zicheng's tech blog 793

Thinkpad可以安装Win11吗?Thinkpad升级Win11教程

win11正式版推出之后,不少用户也想要体验一把新系统,但是不知道thinkpad是否支持win11,其实基本上现在在售的都是可以升级win11的。2、如果大家使用的是老款的ThinkPad,那么可以通过软件来检测自己是否支持win11。【电脑健康状况检查下载】答:在售的ThinkPad都是可以支持win11的,但是部分旧版本不支持。2、这时候想要升级win11的话,就可以通过镜像系统的方式来跳过系统检测。3、如果使用上面的软件检测可以支持win11,那么只要进入“设置”

xhp618的博客 2987

一篇文章足够你学习Bluez,提供史上最全的Bluez教程,让你告别Bluez从入门到放弃

Bluez是真的难,说“入门到放弃”真的毫不夸张,Bluez的学习曲线陡峭,要求对Linux 系统/驱动概念、D-Bus 通信和蓝牙协议都有要求,加上网络上其实没有一个完整的介绍Bluez系列的文档,所以不管是蓝牙初学者还是蓝牙从业人员,都有不小的难度。

朝气蓬勃 2539

Box2D物理引擎入门

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

piglite的专栏 9253

Trae+雪球MCP,化身专业的股票分析师(玩转100个MCP系列第二弹)

大家好呀,我是程序员夏叶,深度AI编程使用者,专注于分享AI编程方面的使用技巧、经验以及前沿资讯,有兴趣的可以关注我的公众号,一起学习,共同进步。第二弹,使用Trae+雪球MCP,获取股票实时行情,分析股票走向等,写代码间隙看看股票价格,研究研究行情,哈哈。真的很不错呀,最关键的是,足够隐蔽,同事以为你在写代码,实际你在浏览股票行情,哈哈,感兴趣的可以试一下哦。说实话,沧州明珠这只股我算是砸手里了,不过还好买的不多,哈哈。

cpp加油站的专栏 518

box2d物理引擎自学笔记整理1

box2d物理引擎自学笔记整理1 本文出自https://shuwoom.com博客,欢迎访问! 由于之前查资料时没有留意box2d中文教程中物理引擎使用的版本号,后来写代码发现,很多地方有差别,回头上官下了文档后,发现,最新版本已经更新到 2.2.1,而之前的上网找到的box2d中文教程是2.0。很抱歉没有留意到版本信息,现在我参考的资料是官方最新的文档内容。 想要了解更详细内容,读者可...

阿蕉的个人博客专栏 2593

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

BOX2D学习

box2d 学习1     开始之前,我假想你已经看过了HelloWorld的源代码,并看了用户手册中关于HelloWorld的相关说明,而且已经大致明白了大多数内容。  其实HelloWorld已经用极其简单的语言向你描述了Box2D物理引擎的运作机制,我们可以归纳一下步骤:  1、 建立一个世界,这个世界基于一个b2AABB框,并设立了一个g值和一个是否允许休眠的bool

yuwenhao0518的专栏 715

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

Cocos2D泰然教程推荐学习步骤

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33804990的博客 95

怀旧版电脑GBC模拟器

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

瘸腿蛤蟆笔记29-cocos2d-x-3.2 Box2d物理引擎dynamics模块介绍

转载标明出处:http://blog.youkuaiyun.com/notbaron/article/details/38611335 上篇回想 本篇名言:奋斗、寻觅、发现,而不屈服。[诗人丁尼生] 上篇中,我们学习了Box2d物理引擎的三大模块之中的一个的collision模块,该模块主要包括形状shape,碰撞函数和动态树等概念。 这次蛤蟆接着学习dynamics模块。   理论介绍 ...

weixin_34163553的博客 93

LibGdx--Box2d单位换算

在手机上用的单位是像素px,而在Box2d中用的是米m,Box2d用于模拟真实世界, 而真实世界是用米为单位来丈量的,所以为了更好地模拟真实世界,所以Box2d以 米为单位(这是我自己的理解)   为了更好地观察Box2d世界里的物体,我们需要一个Box2DDebugRenderer(渲染器) 和一个OrthographicCamera(照相机),这里的OrthographicCamer

zlQQhs(莫落)的专栏 3264

BOX2D 第十四章 参考

第十四章 参考 Dec 2nd, 2012| Comments 声明:此文章翻译自Box2D v2.2.0用户手册,仅供学习参考。 Erin Catto的GDC教程:http://code.google.com/p/box2d/downloads/list Collision Detection in interactive 3D Environments, Gino va

u010000785的专栏 483

box2d学习总结

box2d HelloWorld 一、 HelloWorld 开始之前,我假想你已经看过了HelloWorld的源代码,并看了用户手册中关于HelloWorld的相关说明,而且已经大致明白了大多数内容。 其实HelloWorld已经用极其简单的语言向你描述了Box2D物理引擎的运作机制,我们可以归纳一下步骤: 1、 建立一个世界,这个世界基于一个b2AABB框,并设立了一个

yuwenhao0518的专栏 3667

Box2D 初识

本博文是笔者的学习笔记,学习资料来自Box2D_v2.2.1帮助文档。     Box2D是一个为游戏设计的2d刚体仿真库。程序员可以在他们的游戏里使用它,它可以使物体的运动更加可信,让世界看起来更具交互性。从游戏的视角来看,物理引擎就是一个程序性动画(procedural animation)的系统,而不是由动画师去移动你的物体。 Box2D 是用可移植的 C++ 来写成的。引擎中定

—— 然 之 5457

Box2d 创建世界,和矩形刚体

效果图 /* * name; */ import b2World = Box2D.Dynamics.b2World; import b2BodyDef = Box2D.Dynamics.b2BodyDef; import b2Body = Box2D.Dynamics.b2Body; import b2PolygonShape = Box2D.Collision.Shapes.b2Poly...

weixin_41316824的博客 724

box2d 服务器性能,Box2d预览

初始化box2d这篇应该是box2d的一个整体的说明,它有哪些功能,还有一些总体的概括。参数积分步Box2D是由一些代码构成的积分器,积分器在离散点上做模拟物理运算,它将与游戏动画循环一同运行(时间步的作用)物理的计算需要60帧约束器,用于求解器解决模拟中的约束,一次一个,的那个约束会被求解,但是在求解一个的时候会耽误另一个。处理办法:迭代多次 box2D建议是10次少的迭代会增加性能降低精度...

weixin_39922374的博客 2346

《Box2D for Flash Games》翻译 (一)hello box2d world

(一) Hello Box2D World   如果你想编写一个 2d物理引擎的游戏或者应用,Box2d 是目前为止最好的选择,它已经被成功的应用在多个游戏中,比如 iphone 中的 angry bird 和 Tiny Wings,或者是 flash 版本的 Totem Destroyer 和 Red Remover,随便Google一下,你会知道这些游戏是有多么火了。  

shangguanyingqi的专栏 901

Box2D NetStandard 项目教程

Box2D NetStandard 项目教程 1. 项目的目录结构及介绍 Box2D NetStandard 项目的目录结构如下: box2d-netstandard/ ├── src/ │ ├── Box2D/ │ │ ├── Common/ │ │ ├── Dynamics/ │ │ ├── Rope/ │ │ ├── Shapes/ │ │ ├──...

gitblog_00351的博客 567

box2d的部分心得

<span style="font-family: function() { var id = (this._style >> 24) & 0xff; color: #000000; font-size: medium;">box2d的部分心得 在box2d世界里!我们并不需要让所有的对象都是box2d里的对象!我们需要造就box2d环境与flash player共存:怎么理解

请移架http://blog.sina.com.cn/u/2765457197 1318
上一篇: Java发送Email真的很简单
下一篇: nodejs系列提纲
llmlx
博客等级 码龄23年 15粉丝 105原创
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值