Box2D C++教程-介绍

来源:互联网 发布:手机库存软件 编辑:程序博客网 时间:2024/04/29 09:28

Box2D C++教程1-介绍

本文出自http://www.wenbanana.com稻草人博客,欢迎访问!

备注:由于本人最近在学习box2d引擎,而中文资料中好的文章比较少,我就在google上找了一些英文资料。于是,发现了网上的Box2D tutorial系列文章,觉得写得挺好的,于是做了一些翻译和大家分享分享。由于这是我第一次翻译技术型文章,翻译不当的地方还请各位多理解。

下面我给出原文网址:http://www.iforce2d.net/b2dtut/introduction,本系列翻译文章仅用于学习交流之用,请勿用于商业用途。欢迎各位转载!

 

 

介绍:

Box2D 是世界上用得最普遍的2D物理引擎。它很简洁、强大、高效,而且还很容易移植。它在很多平台上的各种应用充分证明了这一点,而且该引擎还是开源和免费的。想要了解更多关于Box2D的信息,可以登录http://www.box2d.org王章。

 

物理引擎模拟物理世界中的物体,给它们一个真实、可信的运动。尽管,它能被用于其他的用途,但是,box2d项目最初的目标就是作为一个库在游戏中运用,以及那些将box2d作为软件一部分的游戏。引擎的编写和维护工作都是由一名叫ErinCatto的英国人在做,他不仅仅把编写kick-ass引擎作为每天的工作,还把它作为一项业余爱好。

 

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++教程

用户使用手册(user manual)几乎解释了一切你需要知道的关于这个库的东西,至少在C++上是这样。然而,然而我使用Box2D有一段时间,也去一些论坛看一些讨论,我发现相同的问题会有规律的出现。由于这些常见问题我也经历过,我决定提供一建议用来解决这些问题。接着,我就想到,如果我打算这么做得话,我就可能需要从头开始写一系列使用Box2D的教程。

 

在网上四处逛了逛,我发现一些人在这方面已经做了很好的工作:

  • Allan Bishop (Flash)
  • Emanuele Feronato (Flash)
  • Flashy Todd (Flash)
  • Ray Wenderlich (objc/c++/iPhone)
  • Seth Ladd (Javascript)
  • ... you? (let me know!)

正如你见到的,这些大部分都是在Flash上使用,但我会在我的教程上使用C++,因为C++是我在开发上使用的最多的语言。我也将在上面的教程上使用最新版本的Box2D。希望这个使用C++的这些教程能对一些人有用处,同时,我的主题不会和他们的太相似。最后我打算涉及到下面这些内容:

 

基本使用方法:

.Testbed steup(linux, windows, mac)

.Testbed 的结构

.在testbed上创建一个“test”

.物体(Bodies)

.夹具(Fixtures)

.世界设置(World settings)

.无重力(Cancellinggravity)

.压力和冲量(Forces and impluses)

.匀速运动(Moving at constant speed)

.使物体按照给定的角度旋转(Keeping a body rotated at givenangle)

.跳跃(Jumping)

.使用debug draw(Using debug draw)

.绘制自己的物体(Drawing your own objects)

.用户数据(User data)

.Collision callbacks

.碰撞筛选

.感应器(Sensors)

.光线投射(Raycasting)

.World querying

.移除物体(Removing bodies)

.接触地表的问题(The ‘touching the ground’的问题)

.关节(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)

一般而言,终点会放在制作平台游戏,但我会使内容的使用范围尽可能的广些。期间,我会忽略一些引擎的特点,这些特点都是和特殊主体相关,但都是一些比较高级的内容。但愿迟些我能回过头来增加一些‘高级’的章节。

 

我将使用2.1.2版本的Box2D源代码,这个版本似乎是现在最新发布的八本。对于大多数的例子,我会尝试添加一些为教程添加一些来自Box2D源码的代码作为’testbed’中的’test。这就可以直接跳过创建工程了、窗口等等,而且能让我们直接运用库本身。

更新:2.1.2版本现在看起来有些旧,但在2.3.0版本中的主要区别是增加了链条形状(chain shapes)。在这些教程中的大多数素材还仍让可以用的,还有我会添加一些像这样的更新笔记来提醒一些该注意的事项。

 

要求:

要跟进这些教程,你需要中中等水平的C++知识。OpenGL初学者水平会更有帮助,但是不一定是必须具备的。至于所需的软件,你可以下载一切免费的—---现在没有接口啊?

 

反馈:

如果你发现任何的错误或者有更好的意见或者对其中一个主题做评论来反馈的,可以联系我下面的gmail邮箱地址:’iforce2d’

 

原创粉丝点击