Box2D C++ 教程-简介

声明:本文翻译自Box2D C++ tutorial-Instroduction 仅供学习参考。

  • 简介

Box2D这个名字是世界上2D物理引擎中最好的命名,在如今大部分软件都习惯采用动物的名字命名的情况下,似乎Box2D这个名字看起来有点土,但是名字仅仅是个名字,就像玫瑰总是能够散发出香气一样,不管她叫什么玫瑰。轻量级、健壮、高效以及非常的小巧。并且在很多平台上都开辟了很多应用。而且还是开源和免费的。详情可见Box2D官方网站http://www.box2d.org

物理引擎实现了在实时逼真的环境中对物体的物理特性进行了模拟。虽然她可以在很多其他应用中使用,但是她的诞生却是作为游戏中的类库而产生的,因此大部分的游戏软件都会以Box2D作为主要的物理引擎来使用。引擎主要是由Erin Catto(译者注:作者twitter:@Erin Catto,需翻墙)开发并维护,牛b的物理引擎使用起来不应该像全日制工作那样不爽,但是使用牛b的Box2D物理引擎完全可以轻松的当作一种业余爱好。

Box2D使用C++开发,但是被用户社区移植成许多不同的语言版本。这里列出其中的一部分,你可以在这里找到更多http://www.box2d.org/links.html

-(Flash) http://www.box2dflash.org/ 
-(Flash) http://www.sideroller.com/wck/ 
-(Java) http://www.jbox2d.org/ 
-(Python) http://code.google.com/p/pybox2d/ 
-(Javascript) http://box2d-js.sourceforge.net/ 
-(C#) http:code.google.com/p/box2dx/

物理引擎不是游戏引擎。Box2D只是擅长模拟物理状态并没有义务来为你渲染漂亮的图形界面,提供网络服务,创建游戏世界以及加载一个游戏关卡。如果你来到这里的目的是这些的话,那么似乎你可以在下面的链接中找到答案。

-Cocos2d iPhone 
-Citrus engine 
-Corona SDK 
-Game salad 
-Pixelwave(iOS) 
-Dragonfire SDK 
-或者:离开这里…

  • Box2D C++ 教程

用户手册几乎解释了在使用类库方面的所有知识,至少在C++方面是这样的。尽管如此,我在使用Box2D一段时间之后,仍然发现论坛里有一些问题会频繁的出现。既然这些问题我自己也曾经遇到过,那么我觉得我应该写一些如何解决这些问题的方法。既然决定做些什么,我觉得可以从头开始做一个如何正确使用Box2D的教程。

在网上转了一圈,关于这方面,我发现有些人已经做了不错的工作:

-Allan Bishop(Flash) 
-Emanuele Feronato(Flash) 
-Flashy Todd(Flash) 
-Ray Wenderlich(objc/c++/iPhone) 
-Seth Ladd(Javascript) 
-…你?(请让我知道!)(译者注:可怜的我也只能做一些翻译的工作,惭愧啊~)

正如你所看到的,主要是针对Flash的较多,不过既然我的开发环境大部分是使用C++,那么我就把教程定格在C++上。相对于上述的教程,我会尽量使用最新的版本,希望对使用C++的人有所帮助,并且我的话题对他们而言不会太过简单。最终,我希望涵盖如下内容:

  • 基本用法

-Testbed 设置(linux, windows, mac) 
-Testbed 结构 
-为testbed创建一个‘test’ 
-物体(Bodies) 
-定制器(Fixtures) 
-World设置 
-自定义重力(Custom gravity) 
-力与冲量(Forces and impulses) 
-匀速运动(Moving at constant speed) 
-让物体按指定角度旋转(Keeping a body rotated at given angle) 
-跳跃(Jumping) 
-使用debug draw 
-画自己的物体(Drawing your own objects) 
-User data 
-碰撞剖析(Anatomy of a collision) 
-碰撞回调(Collision callbacks) 
-碰撞过滤(Collision filtering) 
-传感器(Sensors) 
-射线投射(Raycasting) 
-查询World(World querying) 
-移除物体(Removing bodies) 
-“触地”问题(The ‘touching the ground’question) 
-连接器(Joints) 
-一些陷阱(Some gotchas)

  • 高级话题

-车辆悬浮(Vehicle suspension) 
-黏性弹力(Sticky projectiles) 
-飞行轨迹(Projected trajectory) 
-爆炸(Explosions) 
-易碎物体(Breakable bodies) 
-自上而下汽车物理(Top-down car physics) 
-地形(Terrain) 
-单面墙和平台(One-way walls and platforms) 
-传送带(Conveyor belts) 
-自动扶梯?(Escalators?) 
-电梯(Elevators) 
-飞箭(Arrow in flight) 
-高级运动特性(Advanced character movement)

一般来说,讲解的焦点都是基于游戏平台,但是我会尽量保持应用的通用性。偶尔我会跳过引擎中和某个主题相关的高级特性,这些会放到高级话题中讲解。希望以后我再次回到这里的的时候能够在“高级话题”中添加一些新内容。

我将会使用目前为止官方最新的release的2.1.2版本中的源代码展开讲解,大部分时候,我会往Box2D例子 源码“Testbed”中添加一个’test’作为教程的讲解代码。这样可以省去一些项目中的其他设置,例如窗体等,这样我们还可以直接使用Box2D的类库方法。更新:当前的2.1.2版本看起来有点旧了,不过与当前版本(v2.3.0)最大不同之处是链形状(chain of shapes)。教程中的大部分特性仍然是适用的,以后我会在需要提醒的地方做一些类似这样的注释。

  • 学习需求

接下来的教程中需要你有中等水平的C++知识。了解基本的OpenGL知识更好,但不是必须的。关于软件需求,你可以无理由的免费下载所有你想要的!呵呵!

  • 贡献

我不确定这里使用贡献(dedication)这个词是否恰当。回看过去,我对OpenGL零起点的学习资料几乎全部来自于NeHe网站。这是一个对我帮助很大的网站,在此非常感谢。虽然现在这些天不怎么访问NeHe网站了,但是建立此网站之初仍然给予了我很大的帮助。感谢Jeff!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值