Box2D和Chipmunk

32、物理引擎:Box2D与Chipmunk的对比与应用 本文详细对比了两款流行的二维物理引擎Box2D和Chipmunk,介绍了它们在Cocos2d游戏开发中的应用与特点。文章涵盖了物理引擎的基本概念、使用方法、局限性以及性能优化建议,并通过代码示例展示了如何在实际项目中初始化Box2D世界并限制物体移动范围。此外,还提供了选择物理引擎的参考依据,帮助开发者根据自身经验和技术需求做出合适的选择。 阅读详情

物理的表现力对游戏的影响越来越重要,几乎已经是现在游戏中不可获取的要素之一,如果进入游戏开发的物理世界中,你会发现这是一个深不可测的领域,没个十几年的功力怕是难说出个头道来的,不过再难总要去面对和挑战,幸运的是随着游戏开发行业的日益成熟,物理引擎已经成为了游戏开发一个专门的方向,有PhysiX和Havok这样为AAA游戏而存在的专业级物理引擎,也有Box2D和Chipmunk这样为2D小游戏量身定做的轻量级物理引擎,使得游戏开发者已经可以实现非常出色的物理效果而不用过多的关心背后的实现机制了。不过也许2D游戏中的物理更适合像我这样的初学者来入门。其实Box2D和Chipmunk这两款物理引擎经过5、6年的发展已经非常成熟,并为数不清的游戏实现了精彩的物理效果,而在现在大红大紫的cocos2d中,同时引入了对这两款物理引擎支持,今天写一点简单的上手教程,一作笔记,二来望能帮助刚刚上手的朋友们。

首先我们需要了解的是Box2D和Chipmunk中所模拟的物理物体全部都是刚体,刚体指的是不会发生任何形变的理想化的物体,PhysX和Havok中是有支持除了刚体外比如布料和流体等高级物理特性的,不过在Box2D和Chipmunk里,刚体已经足够我们制作出出色的物理效果了。物理引擎的工作是通过我们预先为游戏内物体设定的物理参数,比如质量,动能,磨擦等,自动的更新物体的运动和位置,需要注意的物理的真实表现往往需要大量的计算,所以我们必须权衡考虑游戏中所需要的物理计算量,效果和性能的平衡永远是一个程序员需要面对的永恒不变的哲学问题。

快速了解一下Box2D和Chipmunk的主要区别,可以让我们根据自己的需求作出合适的选择。Box2D是用C++写的,而Chipmunk是C风格的,Box2D相比之下有些Chipmunk无法体现的特性,所以如果你更倾向于轻量级或者易于上手,那么也许Chipmunk更适合你一些。

Box2D

要使用Box2D首先有些类是需要我们了解的:
  1. b2World:运行在游戏里的物理世界,是所有有物理表现的物体的容器,负责遍历和更新。
  2. b2BodyDef:刚体定义,表示刚体的物理特性和参数,比如是静态还是动态,加速度角速度等等,主要用于创建b2Body。
  3. b2Body:刚体,在世界内创建的刚体。
  4. b2Shape:表示刚体的形状的,b2Shape只是基类,它的子类目前包括ChainShape、CircleShape、EdgeShape、PolygonShape等分别实现了多边形、三角形、球等形状。主要的用处是通过b2Body的CreateFixture接口来为刚体b2Body创建外形,要注意的是目前Box2D是无法创建空心球体的,只能通过多边形来近似模拟空心圆。
  5. b2FixureDef:定义形状的,表示刚体形状的具体物理特性,比如摩擦力、密度、弹性等等,主要是用于创建形状的。

我们可以通过一小段代码来了解Box2D是如何来创建这些对象的:

在Box2D的世界里,世界的大小是通过”米”来衡量的,而我们在游戏中通常都是通过像素来描述的,所以我们需要做一个将单位从像素点到米的转换,以便让我游戏背后的物理世界能和游戏画面所表示的内容完美的结合起来。

#define PTM_RATIO 32

Box2D使用”米”作为刻度衡量单位有另一个考虑是出于性能上的,内部的机制使得刚体最好的性能和质量表现是建立在合理的刚体大小基础上的,如果物体普遍太小或者普遍太大,则容易引起各种各样的问题。一般来说尽量不要让刚体小于0.1米或者大于10米。

在cocos2d中如果我们想把b2Body和CCSprite关联起来:

b2World的函数Step()负责更新物理世界,后面两个参数代表着模拟的精度。有的文章中提到这里dtTime如果帧数浮动不是很大,那么最好是固定,否则容易导致刚体的运动不稳定,不过我目前还没有非常深入的使用,所以究竟如何是需要实践一下。

Box2D的碰撞检测是通过b2ContactListenner来实现的,如果你想接受来自碰撞的回调,你需要创建一个继承自b2ContactListener的新类:

BeginContact()和EndContact()会在碰撞发生时被调用,如果要让Listener生效,需要在创建b2World时为他附上这个监听者:

Chipmunk

我在实际的开发中并没有使用过Chipmunk,所以我只能浅显的介绍一下Chipmunk的大概,更多的需要朋友们自己去查看文档,但我想我们了解了Box2D所创建的物理世界,那么理解Chipmunk应该是异曲同工的,Chipmunk和Box2D最大的不同在于它是C风格的实现,在Chipmunk中把物理世界称为Space而不是World,创建也很简单:

Chipmunk中不需要将像素转换成米,而是直接使用像素大小来表示,创建静态的body同样简单:

由于Chipmunk是C代码风格的,所以我们可以找到各种类似于cpSegmentShapeNew(),cpSpaceAddStaticShpa(),cpSpaceAddBody()各种各样的函数来为space添加各种形状。

Chipmunk的更新类似于Box2D的Step()函数,由一个cpSpaceStep(space, dtTime)来负责。而与CCSprite的同步是通过一个cpSpaceHashEach来遍历循环的:

Chipmunk的碰撞是通过函数cpSpaceAddCollisionHandler(space, defaultCollisionType, defaultCollisionType, &contactBegin, NULL, NULL, &contactEnd, NULL);来完成的。其中contactBegin和contactEnd是两个静态函数,如果碰撞发生,他们会返回YES,如果返回NO,那么我们可以忽略碰撞。

原文:http://www.ownself.org/blog/2013/box2d-he-chipmunk.html

29、物理引擎:Box2D与Chipmunk的深度解析 本文深入解析了两款流行的二维物理引擎Box2D和Chipmunk,详细介绍了它们在iOS游戏开发中的应用。内容涵盖了物理引擎的基本概念、使用方法、代码示例以及各自的优缺点,帮助开发者根据自身需求选择合适的引擎。文章还提供了Box2D初始化、坐标转换、动态物体创建、关节使用和物理世界更新等具体实现步骤,并通过流程图展示了物理引擎在游戏开发中的整体运行机制。 阅读详情

相关推荐

30、物理引擎:Box2D与Chipmunk的对比与使用指南

本文详细对比了两款流行的物理引擎 Box2D 和 Chipmunk,介绍了它们在游戏开发中的使用方法和适用场景。文章涵盖了物理引擎的基础概念、初始化流程、物体创建、碰撞处理、单位转换以及常见问题的解决方案,并通过弹珠游戏的示例展示了如何在实际项目中应用 Box2D 和 Chipmunk。开发者可以根据自身需求选择合适的物理引擎进行开发,并避免常见的技术问题。

e4f5g6h7的博客 152

Box2D和Chipmunk的对比 Cocos2d-x物理引擎

语言开发:

wu_123_456的专栏 1564

33、游戏物理引擎:Box2D与Chipmunk的使用指南

本文详细介绍了游戏开发中常用的物理引擎Box2D和Chipmunk的使用方法。内容涵盖基础设置、物体添加、世界更新、碰撞检测、关节连接等核心知识点,并对两个引擎的特点、内存管理、结构体使用等方面进行了对比。通过实例代码和具体操作流程,帮助开发者快速掌握物理引擎的集成与应用,提升游戏的真实感和交互体验。此外,还总结了常见问题的解决方法以及性能优化技巧,为游戏开发者提供全面的参考指南。

q9w8e7r6t5的博客 60

物理引擎比较:Box2D 对比 Chipmunk

Cocos2d 自带了两套物理引擎:Box2D 和 Chipmunk。那么我们应该选择哪一个呢?很多情况下,这个选择取决于个人口味。很多游戏开发者对这两个物理引擎的 争论集中于它们所用的编程语言:Box2D 是用 C++写的,而 Chipmunk 用的是 C。你可能因为 C++接口而更喜欢 Box2D。使用 C++的好处是它可以很好地与同样是 面向对象的 Objective-C 进行整合。而且 B...

weixin_34198453的博客 437

34、物理引擎:Box2D与Chipmunk的应用指南

本文详细介绍了在游戏开发中使用Box2D和Chipmunk物理引擎的关键技术,包括质量与尺寸设置、坐标转换、物体添加、世界更新、碰撞检测以及关节连接等内容。通过代码示例和操作指南,帮助开发者掌握如何在实际项目中应用这些物理引擎,实现逼真的物理效果。文章还对Box2D与Chipmunk的特性进行了对比,并探讨了未来物理引擎的发展趋势。

u9v0w的博客 70

32、物理引擎:Box2D与Chipmunk的对比与使用

本文详细介绍了在Cocos2d游戏开发中常用的两款物理引擎Box2D和Chipmunk,包括它们的基本概念、优缺点、使用方法以及在实际游戏中的应用案例。文章还提供了初始化Box2D世界的关键代码、物理引擎使用流程、常见问题解决方法以及性能优化建议。通过本文,开发者可以更好地理解和选择适合自己的物理引擎,提升游戏的真实感和趣味性。

fox11的博客 108

安卓游戏开发之物理引擎优劣分析

在安卓游戏开发中,物理引擎是模拟现实世界中物理现象和技术的核心组件,它能够使得游戏中的物体和行为更加真实。物理引擎通常能够处理碰撞检测、动力学模拟、刚体、软体、关节、碰撞响应、摩擦力和更多物理效应。 不同的物理引擎有不同的特性和应用场景,因此选择适合的物理引擎对于游戏开发至关重要。 以下是几个流行的物理引擎优缺点分析,应用场景以及如何使用它们进行代码级别的说明。

wlred1980的博客 2446

30、物理引擎:Box2D与Chipmunk的应用与实践

本文详细介绍了Box2D与Chipmunk两种物理引擎的应用与实践,涵盖在游戏开发中如何添加物理物体、实现精灵与物体同步、进行碰撞检测与关节连接,以及Chipmunk的初始化与边界定义等内容。通过示例代码解析了Box2D与Chipmunk的基本使用方法及两者之间的差异,为开发者提供了物理效果实现的实用指导。

tree8的博客 95

Box2D和Chipmunk的一些对比

Box2D更重,Chipmunk更轻量级 Box2D的类是 b2World:运行在游戏里的物理世界,是所有有物理表现的物体的容器,负责遍历和更新。 b2BodyDef:刚体定义,表示刚体的物理特性和参数,比如是静态还是动态,加速度角速度等等,主要用于创建b2Body。 b2Body:刚体,在...

chenzhisheng8919的博客 488

33、游戏物理引擎:Box2D与Chipmunk深度解析

本文深入解析了两款流行的二维游戏物理引擎Box2D和Chipmunk,介绍了它们的基本概念、特点、优缺点以及在Cocos2d中的应用。文章涵盖了物理引擎的工作原理、使用场景、代码实现示例以及性能优化建议,帮助开发者根据项目需求选择合适的物理引擎。此外,还通过《愤怒的小鸟》和《果冻汽车》等实际案例展示了物理引擎在游戏开发中的具体应用。

u9v0w的博客 117

Cocos2d-x 3.0 开发(九)使用Physicals代替Box2D和chipmunk的3.0 alpha1新版本

Cocos2d-x 3.0 开发(九)使用Physicals代替Box2D和chipmunk的3.0 alpha1新版本 对应于Coco2d-x 3.0 alpha1 使用,更新之前3.0 alpha0 的 文件。相关博客地址:http://blog.youkuaiyun.com/fansongy/article/details/14142323

Chipmump文档

提示:原网站已由百度转码,以便在移动设备上查看。泰然 Chipmunk2D中文手册目 录 Chipmunk2D中文手册,由泰然翻译组翻译。转载请著名出处。翻译:ChildhoodAndy(完成了大部分的翻译), u0u0, gloryming。校对:涵紫 github贡献地址:https://github.com/iTyran/ChipmunkDocsCN 欢迎大家斧正错误,提交PR。首先,我要非

过期的码农 2274

Cocos2d-x 3.0 开发(九)使用Physicals代替Box2D和chipmunk

模拟真实的世界是个比较麻烦的事情 通常这种事情都是交给物理引擎来做 但它们使用的过程中有个令人讨厌的地方 参数太多了 为了初始化一个简单的场景要写很多代码 在cocos2d x 3 0版本中 出现了一个新类族 physicals 它将Box2D或者chipmunk做了一层封装 使我们的上层调用有更友好的接口 相关博客:http: blog youkuaiyun.com fansongy article details 14142323">模拟真实的世界是个比较麻烦的事情 通常这种事情都是交给物理引擎来做 但它们使用的过程中有个令人讨厌的地方 参数太多了 为了初始化一个简单的场景要写很多代码 在cocos2d x 3 0版本中 出现了一个新类族 physi [更多]

三大物理引擎终极指南:Box2D、Bullet和Chipmunk深度对比

在游戏开发中,物理引擎是实现真实感交互的核心技术。无论你是制作2D平台游戏还是3D射击游戏,选择合适的物理引擎都能让你的游戏体验更加出色。今天我们将深入对比游戏开发中最受欢迎的三大物理引擎:Box2D、Bullet和Chipmunk,帮助你找到最适合项目的物理引擎解决方案。 [![游戏开发物理引擎对比](https://raw.gitcode.com/gh_mirrors/ma/magictoo

gitblog_00877的博客 544

RT-Thread 5.1.0 实战:手把手教你用CubeMX和RT-Studio创建第一个工程(附常见编译错误修复)

本文详细介绍了如何使用STM32CubeMX和RT-Thread Studio 5.1.0创建第一个RT-Thread工程,包括开发环境准备、CubeMX配置、工程整合及常见编译错误修复。通过实战指南,帮助开发者快速上手RT-Thread 5.1.0,解决开发过程中的典型问题,提升嵌入式开发效率。

weixin_29165465的博客 285

第十篇|网络子系统 ②——无损以太网、PFC/ECN、DCQCN 与拥塞可视化

网络部分了解了解

qq_37535542的博客 1873

物理引擎Box2d与Chipmunk比较

Cocos2d 自带了两套物理引擎:Box2D 和 Chipmunk。那么我们应该选择哪一个呢? 很多情况下,这个选择取决于个人口味。很多游戏开发者对这两个物理引擎的 争论集中于它们所用的编程语言:Box2D 是用 C++写的,而 Chipmunk 用的是 C。 你可能因为 C++接口而更喜欢 Box2D。使用 C++的好处是它可以很好地与同样是 面向对象的 Objective-C 进行整合。

hzl877243276的专栏 1991

用Python turtle库 绘制皮卡丘

Turtle库是Python语言中一个很流行的绘制图像的函数库,想象一个小乌龟,在一个横轴为x、纵轴为y的坐标系原点,(0,0)位置开始,它根据一组函数指令的控制,在这个平面坐标系中移动,从而在它爬行的路径上绘制了图形。 turtle基础知识参考: https://gitchat.blog.youkuaiyun.com/article/details/90696190 https://blog.csdn.ne...

qq_36295856的博客 2万+
上一篇: cocos2dx 粒子系统
下一篇: vi 设置自动换行和自动折行
tspangle
博客等级 码龄19年 81粉丝 88原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值