Box2D C++教程
文章平均质量分 94
箭已离弓
总想着自己写博客,可是网上写好的太多。所以就转载过来学习吧。
展开
-
Box2D C++ 教程-简介
声明:本文翻译自Box2D C++ tutorial-Instroduction 仅供学习参考。简介Box2D这个名字是世界上2D物理引擎中最好的命名,在如今大部分软件都习惯采用动物的名字命名的情况下,似乎Box2D这个名字看起来有点土,但是名字仅仅是个名字,就像玫瑰总是能够散发出香气一样,不管她叫什么玫瑰。轻量级、健壮、高效以及非常的小巧。并且在很多平台上都开辟了很多应用转载 2016-05-19 21:26:44 · 560 阅读 · 0 评论 -
Box2D C++ 教程-源代码
声明:本教程翻译自:Box 2D C++ turorials - Source code,仅供学习参考。教程源代码这里你可以下载到教程中所提到相关话题的例子源代码。zip文件中包含了标准的并带有一些额外添加测试的Box2D v2.1.2源码树,所以你应该可以使用cmake或者在Setup话题中提到的相关code::blocks方法进行编译。教程中例子的源代码(更新到转载 2016-05-20 21:21:26 · 493 阅读 · 0 评论 -
Box2D C++ 教程-碰撞回调
声明:本教程翻译自:Box2D C++ tutorials Collision callbacks,仅供学习参考。碰撞回调(Collision callbacks)当物理场景中的物体移动或者彼此之间发生碰撞的时候,Box2D会为我们处理所有必要的碰撞监测,对于这一点我们不必过于担心。但是就整个游戏来说,偶尔我们需要在物体发生碰撞的时候触发一些事件。例如当游戏玩家触碰到怪物的转载 2016-05-20 21:22:56 · 790 阅读 · 0 评论 -
Box2D C++ 教程-碰撞过滤
声明:本教程翻译自:Box2D C++ tutorials-Collision filtering,仅供学习参考。碰撞过滤(Collision filtering)到目前为止所有场景都是我们自己创建的,场景中的每个定制器(fixture)之间可以互相发生碰撞。这是默认的物理环境,但是可以通过设置’碰撞过滤’(Collision filtering)来控制定制器之间的碰撞状态转载 2016-05-20 21:24:00 · 2541 阅读 · 0 评论 -
Box2D C++ 教程-传感器
声明:本教程翻译自:Box2D C++ tutorials-Sensors ,仅供学习参考。传感器(Sensors)在上一个话题中,我们看到,可以通过一些设置防止两个定制器发生碰撞。它们肆无忌惮的互相穿透,好像压根儿就没有看到对方,即便它们在穿透的过程中停止运动,也会保持着重叠的状态。也许这可能就是你想要的特性,但这么做有一个缺陷:既然互相之间没有碰撞,那么我们也就永远都不转载 2016-05-20 21:24:50 · 1006 阅读 · 0 评论 -
Box2D C++ 教程-射线投射
声明:本教程翻译自:Box2D C++ tutorials - Ray casting,仅供学习参考。射线投射经常用来找出部分物理世界当中已经存在的物件。所谓射线就是一条直线,我们可以通过使用Box2D当中提供的方法来检测是否与某个定制器(fixture)有交点。我们也可以找出与定制器交点的法线。下面就是上面我提到的方法,如果射线与某个定制器发生碰撞则返回true。这里需要注意转载 2016-05-20 21:25:31 · 1866 阅读 · 0 评论 -
Box2D C++ 教程-查询 World
声明:本文翻译自Box2D C++ tutorial-World querying,仅供学习参考。查询World通常你可能想知道在给定的场景中都有哪些实体。例如有一个炸弹爆炸了,周围的所有实物都会受到不同程度的破坏,那么在RTS(译者注:Real-Time Strategy,即时战略)游戏当中,当玩家拖拉一个选框的时候,玩家可以合理的选中其中尚未完全破坏的单位。这种快速查询部分转载 2016-05-20 21:26:20 · 424 阅读 · 0 评论 -
Box2D C++ 教程-安全地移除物体
声明:本文翻译自Box2D C++ tutorial-Removing bodies safely,仅供学习参考。安全地移除物体除非你正在完成一个最基本地游戏,否则很有可能你会在游戏进行的某一时刻删除一些物体。比如说当玩家杀死一个敌人后,所发出的子弹需要被清除掉,还比如说两个物体发生碰撞其中一个完全毁坏,等等很多此类的例子。在代码中移除一个物体简单的令人发指-只要调用world转载 2016-05-21 09:50:36 · 717 阅读 · 0 评论 -
Box2D C++ 教程-跳跃问题
声明:本文翻译自Box2D C++ tutorial-The ‘can I jump’ question,仅供学习参考。在地上是我的特性吗?如果曾经遇到了关于Box2D的问题,多半可能有“我如何告诉我的游戏角色当前是站在地上的”。我想这个问题如此频繁的冒出来的首要原因,是因为类似回调方法可以得到接触信息有关-回调方法可以抛出与当前物体自身不同的相关信息,或许还因为可以获知当前接转载 2016-05-21 09:51:20 · 904 阅读 · 0 评论 -
Box2D C++ 教程-幽灵顶点
声明:本文翻译自Box2D C++ tutorial-Ghost vertices,仅供学习参考。题外话:因为在Box2D的用户手册的第四章中,我把ghost vertices翻译成了幽灵顶点,所以这里还延续这个翻译吧,如果有人有更恰当的翻译,指出来我会改正,:)。好了,下面开始正文。(注意:本话题接下来要说的内容和其它教程并不太一样,因为其它教程是基于Box2D v2.1转载 2016-05-21 09:51:55 · 1328 阅读 · 0 评论 -
Box2D C++ 教程-连接器-概述
声明:本文翻译自Box2D C++ tutorial-Joints-overview,仅供学习参考。连接器Box2D中有大量的’连接器(joints)’用来把两个物体连接到一起。这些连接器可以模拟物体之间的相互作用,以此形成铰链,活塞,绳索,车轮,滑轮,汽车,链子,等等吧。学习使用连接器可以高效的帮你创建更吸引人和有趣的场景。让我们快速浏览一些有效的连接器,然后回顾一下转载 2016-05-21 09:52:31 · 1013 阅读 · 0 评论 -
Box2D C++ 教程-连接器-旋转
声明:本文翻译自Box2D C++ tutorial-Joints-revolute,仅供学习参考。旋转连接器(Revolute joints)旋转连接器可以想象成枢纽,锚点,或者转轴。每个物体上都定义一个锚点,物体移动的时候锚点总是重合的,之间的相对转动也是没有限制的(译者注:详细可见Box2D手册第八章旋转连接器部分,此处有一张图,一目了然)。旋转连接器可以设置限制转载 2016-05-21 09:53:06 · 700 阅读 · 0 评论 -
Box2D C++ 教程-连接器-平移
声明:本文翻译自Box2D C++ tutorial-Joints-prismatic,仅供学习参考。平移连接器(Prismatic joints)平移连接器可能更多的俗称为滑动连接器。连接器上的两个物体相对于彼此来说保持固定的旋转,它们只能够沿着特定的轴线一起移动。平移连接器可以进行限定,保证其只能沿着某个轴在一定范围内进行移动。还可以设定此连接器的马达,连接的物体会以给定的转载 2016-05-21 09:54:19 · 614 阅读 · 0 评论 -
Box2D C++ 教程-碰撞剖析
声明:本教程翻译自:Box 2D C++ turorials - Anatomy of a collision,仅供学习参考。在Box2D中,经常会遇到物体之间的碰撞问题,当一个碰撞发生时,就是利用定制器(fixtures)用来做碰撞检测的。碰撞可以以很多方式进行,我们可以在碰撞过程中获取大量信息用在游戏逻辑中。比如说,你可能想知道这几条信息:-碰撞的开始和结束 -定制转载 2016-05-20 21:20:33 · 3463 阅读 · 0 评论 -
Box2D C++ 教程-Testbed结构
声明:本文翻译自Box2D tutorials-Testbed structure ,仅供学习参考。Testbed结构testbed框架可以让你高效的添加新的测试。当定义一个新的测试,只要写出针对于测试必要的代码即可。相对于所有测试来说的,相同功能的方法例如,创建、销毁、重设,以及控制面板上的选中框和按钮,都由testbed框架来处理,永远都不需要你亲自更改。每个测试的转载 2016-05-20 09:43:14 · 699 阅读 · 0 评论 -
Box2D C++ 教程-用户数据
用户数据(User data)在上一个话题中,我们看到在游戏实体中存储物理对象的的用处。有时候情况相反也许也很有用-在游戏中,一个物理实体指针存储游戏实体。在Box2D中这叫做user data,这是一个能够让你存储有用数据的指针。下面这些类都有这个功能:-b2Body -b2Fixture -b2JointBox2D不会在意具体内容是什么,而且不会对内容有任何操作转载 2016-05-20 21:03:27 · 461 阅读 · 0 评论 -
Box2D C++ 教程-环境设置
声明:本文翻译自Box2D C++ tutorial-Setting up ,仅供学习参考。环境设置包括三种主流系统:-Windows -Linux -Mac由于最新的Box2D版本,源码中针对Windows和Mac平台中的主流IDE(VS2010和XCode4)已经进行了整合,所以这里就不进行翻译了,再者教程原文中的设置看起来已经过时了,有兴趣的读者可以自转载 2016-05-19 21:39:52 · 525 阅读 · 0 评论 -
Box2D C++ 教程-创建测试
声明:本教程翻译自:Box2D C++ tutorials-Making a test,仅供学习参考。创建属于你的测试让我们向testbed中添加一个测试,这里只是一个简单的例子,一开始不会实现很多功能,但是作为一个例子我们会看到所有需要编辑和修改的地方。首先需要一个Test类的子类来定义测试自身。在Testbed/Tests文件夹下面,应该可以找到一大堆在testbe转载 2016-05-20 09:44:18 · 368 阅读 · 0 评论 -
Box2D C++ 教程-物体
声明:本教程翻译自:Box2D C++ tutorials-Bodies,仅供学习参考。物体(Bodies)物体是物理场景中的基本对象,但是这里的物体并不是你看到的实际互相弹跳碰撞的实物。听起来很费解吗?挺住!马上做解释!你可以把物体想象成是一种看不见摸不着的实物的属性。这些不可见的属性是:-质量(mass)-实物到底有多重 -速度(velocity)-转载 2016-05-20 09:44:51 · 519 阅读 · 0 评论 -
Box2D C++ 教程-定制器
声明:本教程翻译自: Box2D C++ tutorials- Fixtures ,仅供学习参考。定制器(Fixtures)定制器用来描述场景中对象的大小,形状,材质属性等。一个物体可以附加多个定制器,物体的质心会因为定制器的附加顺序所影响。当两个物体相撞时,会根据各自的定制器作出相应的反应。定制器的主要属性如下:-形状 - 多边形或圆弧 -恢复 - 定制器的弹转载 2016-05-20 09:45:30 · 386 阅读 · 0 评论 -
Box2D C++ 教程-设置世界
声明:本教程翻译自: Box2D C++ tutorials-World settings ,仅供学习参考。世界(Worlds)世界(Worlds)作为Box2D世界里主要的实体,在之前的讨论话题中已简单的介绍过。当你创建或者删除物体的时候,可以调用世界里的方法来完成这些功能,所以世界也管理着所有对象的空间分配。这也就意味着世界非常重要,那么就让我们来看看世界到底可以做些什转载 2016-05-20 09:46:18 · 682 阅读 · 0 评论 -
Box2D C++ 教程-力和冲量
声明:本教程翻译自:Box2D C++ tutorials-Forces and impulses,仅供学习参考。力和冲量(Forces and impulses)让物体移动,需要对其施加力或者冲量。可以通过时间的不断积累对物体施加力的作用来改变物体的运动,然而冲量作用于物体则会立刻改变物体的速度。举个例子,想象一下现在你的车坏了,你想推车,可以选择驱动另外一辆车缓慢开向这转载 2016-05-20 09:46:51 · 1933 阅读 · 0 评论 -
Box2D C++ 教程-自定义重力
声明:本教程翻译自:Box2D C++ tutorials-Custom gravity,仅供学习参考。为每一个物体指定不同的重力我们经常会遇到的一个问题是,在其他物体依然遵循重力规则的情况下,如何让指定的物体不受重力影响。其实这实现起来很简单,现在就用我们所了解的力矩试着实现它。我们还是以上一个话题的场景为基础,使用三个独立的物体。123转载 2016-05-20 09:47:31 · 625 阅读 · 0 评论 -
Box2D C++ 教程-匀速运动
声明:本教程翻译自:Box2D tutorials-Moving at constant speed,仅供学习参考。以匀速移动物体游戏中一种常见的需求是让物体做匀速运动。例如横屏游戏中的玩家角色,太空飞船或者汽车,等等。根据游戏的不同,有时候物体应该逐渐改变速度,其他情况又希望能够瞬间开始和停止运动。使用SetLinearVelocity方法精确的设置物体速度,这种方法看起转载 2016-05-20 09:48:31 · 602 阅读 · 0 评论 -
Box2D C++ 教程-旋转到指定角度
声明:本教程翻译自:Box2D C++ tutorials-Rotating to a given angle,仅供学习参考。旋转指定角度这个话题和之前的那个话题类似,只不过把直线运动改成旋转运动。旋转一个物体既可以直接设置角度也可以通过设置扭矩/冲量方法来实现,同样需要注意的问题是,如果直接设置物体的角度,其实并不算是真正的模拟物理场景。为了做这个实验我们需要一个转载 2016-05-20 09:49:08 · 1036 阅读 · 0 评论 -
Box2D C++ 教程-跳跃
声明:本教程翻译自:Box 2D C++ turorials - Jumping,仅供学习参考。跳跃(Jumping)水平滚轴游戏中的角色可以进行跳跃,是吧?现在就让我们看看几种不同实现跳跃的方法。我们已经在之前力和冲量(force and impulses)的话题中进行过相关问题的讨论,但是现在就让我们考虑一下如何把这些方法整合到游戏中。我们可以从匀速运动(movin转载 2016-05-20 09:49:44 · 397 阅读 · 0 评论 -
Box2D C++ 教程-使用debug Draw
声明:本教程翻译自:Box 2D C++ turorials - Using debug draw,仅供学习参考。使用debug drawtestbed使用一个称为“debug draw”的特性来画你所见到的形状。不过很显然,如果你想让游戏能够更加吸引眼球,还是需要替换那些无聊的多边形的,但是当物理场景中产生问题时,debug draw会变的非常有用。有时候问题发生在游戏场转载 2016-05-20 09:50:30 · 725 阅读 · 0 评论 -
Box2D C++ 教程-画自己的图像
声明:本教程翻译自:Box 2D C++ turorials - Drawing your own objects,仅供学习参考。画自己的图像从之前的话题中可以看出,很显然使用debug draw不能做出视觉上具有吸引力的游戏。通常我们都会使用我们自己的方法在场景中画图像,然后访问Box2d获取物体的物理信息以此知道在哪里画图像。在本次话题中,我们将会专门定义一个类用作渲染转载 2016-05-20 09:51:08 · 674 阅读 · 0 评论 -
Box2D C++ 教程-开发环境设置(iPhone)
声明:本文翻译自Box2D C++ tutorial-Setting up (iPhone),仅供学习参考。简介这篇文章针对在iOS上使用Box2D和OpenGL进行开发的环境设置问题。既然这跟环境设置话题中使用testbed框架不一样,那么我么也就让这个教程页单独分离出来,但是如果你现在的情况依然是我六个月前提到的情况,那么这篇文章依然对你有用:想用Box2D基于转载 2016-05-21 09:55:11 · 574 阅读 · 0 评论