Box2D v2.1.0用户手册翻译 - 目录,第01章 导言(Introduction)

LayaBox AS3版飞机大战游戏解析与实践 随着HTML5技术的不断演进和移动设备性能的提升,LayaBox游戏引擎以其轻量级、跨平台、高性能的特性,在快速发展的游戏市场中脱颖而出。作为一款专为Web游戏和应用设计的开发框架,LayaBox不仅支持2D游戏的开发,还能够处理较为复杂的3D场景。本章将介绍LayaBox的基础概念和它在现代游戏开发中的地位。LayaBox游戏引擎的主要优势包括:跨平台兼容性:LayaBox能够轻松地将游戏部署到各种设备上,包括PC、移动设备及各种浏览器,极大地拓宽了游戏的覆盖面和用户基础。 阅读详情

网上已经有个Box2D用户手册的翻译,但是基于v2.0.1,跟最新手册有很多不对应。

在这里决定将文档的全文再翻译出来,更准确的说是根据网上流传的v2.0.1版本,将最新文档重新整理一遍。

很多内容是直接复制自


Aman JIANG(江超宇)翻译的Box2D v2.0.1 用户手册



Box2D v2.1.0 用户手册

版权 © 2007-2010 Erin Catto

第01章 导言(Introduction)

第02章 Hello Box2D

第03章 公共模块(Common)

第04章 碰撞模块(Collision Module)

第05章 动态模块(Dynamics Module)

第06章 夹具(Fixtures)

第07章 物体(Bodies)

第08章 关节(Joints)

第09章 接触(Contacts)

第10章 世界(World Class)

第11章 杂项(Loose Ends)

第12章 调试绘图(Debug Drawing)

第13章 限制(Limitations)

第14章 参考(References)

 

第01章 导言(Introduction)

1.1 关于

Box2D是个二维刚体仿真库, 用于编写游戏。程序员可以使用它, 让游戏中的物体运动起来更真实, 让游戏世界更具交互性。以游戏的角度来看,物理引擎只是个程序性动画系统。(procedural animation)

(译注: 做动画常有两种方法, 一种是预先准备好动画所需的数据,比如图片,再一帧一帧地播放。另一种是以一定方法,动态计算出动画所需的数据,根据数据再进行绘图。 
从这种角度看,预先准备的,可称为数据性动画,动态计算的可称为程序性动画。
这个区别,就类似以前我们做历史题和数学题,做历史题,记忆很重要,也就是答案需要预先准备好的。做数学题,方法就很重要,答案是需要用方法推导出来的。 
Box2D就是用物理学的方法,推导出那游戏世界物体的位置,角度等数据。而Box2D也仅仅推导出数据,至于得到数据之后怎么处理就是程序员自己的事情了。)

Box2D用可移植的C++来写成,它定义的大部分类型都有b2前缀, 希望这能有效消除Box2D和你自己的游戏引擎之间的名字冲突。

1.2 先备条件(Prerequisites)

在此手册中,我假定你已经熟悉了基本的物理概念,比如质量(mass),力(force),扭矩(torque)和冲量(impulses)。如果没有, 建议读一下Chris Hecker和David Baraff (google 这些名字)的教程, 你不需要理解得非常细致, 只需很好地了解一些基本概念, 帮助你使用Box2D。

Wikipedia也是个很好的地方,去获取物理和数学知识。Wikipedia的内容经过了精心的整理,在某些方面可能比google更有用。

在Game Developer Conference上, Box2D是作为物理教程的一部分而创建的。你可以从box2d.org的下载区得到这些教程。

Box2D是使用C++写成的, 因此也假定你具备C++编程经验。Box2D不应该是你的第一个C++程序项目。你应该能熟练地编译,链接和调试。

注意

Box2D不应该是你的第一个C++项目。在使用Box2D之前, 请先学习C++程序设计, 还要学习怎么去编译, 连接和调试。网上有很多这方面的资料。

1.3 关于本手册

本手册涵盖了大多数Box2D的API,但并非每个方面都涉及到。Box2D自带了testbed例子, 鼓励你去看看, 以便了解更多。另外, Box2D的代码注释已被整理过, 符合Doxygen程序的格式要求, 所以很容易就可以创建一个有超链接的API文档。

1.4 反馈及错误报告

如果你想反馈Box2D的任何内容,请在论坛里留下意见。这也是个交流讨论的好去处。

Box2D使用了Google code project进行问题跟踪。这是个跟踪问题的好方法, 保证你的反馈不会被淹没在论坛深处而无人理会。

你的问题描述得越详细, 就越有可能得到修复。假如有个测试例子将问题重现, 就更好了。

1.5 核心概念(Core Concepts)

Box2D中有一些基本对象, 这里我们先做一个简要的定义, 随后的文档会有更详细的描述。

形状(shape)

2D几何对象, 比如圆形(circle)或多边形(polygon)。

刚体(rigid body)

十分坚硬的物质, 坚硬得像钻石,它上面任意两点之间的距离都保持不变。在后面的讨论中,我们用物体(body)来代替刚体。

夹具(fixture)

fixture将形状绑定到物体之上, 并有一定的材质属性, 比如密度(density), 摩擦(friction)和恢复(restitution)。

(译注:一个物体和另一物体碰撞, 碰撞后速度和碰撞前速度的比值会保持不变,这比值就叫恢复系数。)

约束(constraint)

约束是个物理连接, 用于消除物体的自由度。在2D中, 物体有3个自由度(水平,垂直,旋转)。如果我们把一个物体钉在墙上(像钟摆那样), 那就把它约束到了墙上。这个时候,此物体就只能绕着钉子旋转, 所以这个约束消除了它2个自由度。

(译注:简单的说, 需要用几个参数来确定物体的空间状态, 这个物体就有几个自由度。在二维中,完全没有约束的条件下, 我们要确定物体的状态, 要有x坐标, y坐标, 旋转角这三个参数, 所以自由度为3。如果物体被钉在墙上, 只要有旋转角,就可以完全确定物体的状态,有了钉子这个约束,物体自由度就变成了1。)

接触约束(contact constraint)

一种特殊的约束, 设计的目的是为了防止刚体被穿透, 也用于模拟摩擦和恢复。接触约束不用你来创建, 它们会自动被Box2D生成。

关节(joint)

关节就是种约束, 用于将两个或多个body固定到一起。Box2D支持不同的关节类型:转动(revolute),棱柱(prismatic),距离(distance)等。一些关节可以有限制(limits)和马达(motors)。

关节限制(joint limit)

关节限制限定了一个关节的运动范围。例如人类的胳膊肘只能在某一角度范围内运动。

关节马达(joint motor)

根据关节的自由度, 关节马达可以驱动关节所连接的物体。例如, 你可以使用一个马达来驱动一个肘的旋转。

世界(world)

一个物理世界就是各种, 刚体(bodies), 夹具(fixtures), 约束(constraints)相互作用的集合。 Box2D支持创建多个世界, 但这通常没有必要。

1.6 模块(Modules)

Box2D由三个模块组成:公共(Common)、碰撞(Collision)、和动态(Dynamics)。Common模块包括了内存分配、数学计算和配置。Collision模块定义了形状(shapes)、broad-phase检测和碰撞功能/查询(collision functions/queries)。最后,Dynamics模块提供对世界(world)、刚体(bodies)、夹具(fixtures)和关节(joint)的模拟。

(译注: Broad Phase是碰撞检测的一个子阶段, 将空间分割, 每个空间对应一个子树, 物体就放到树中, 不同子树内的物体不可能相交不用去计算, 在同一个子树由对应的算法再计算出接触点等信息。因为这是远距碰撞检测,就叫Broad Phase, 接下来还有Narrow Phase。)


1.7 单位

Box2D使用浮点数, 所以必须使用一些公差来保证它正常工作。这些公差已经被调谐得适合米-千克-秒(MKS)单位。尤其是, Box2D被调谐得能良好地处理0.1到10米之间的移动物体。这意味着从罐头盒到公共汽车大小的对象都能良好地工作。静态的物体就算到50米都没有大问题。

作为一个2D物理引擎,如果能使用像素作为单位是很诱人的。很不幸,那将导致不良模拟,也可能会造成古怪的行为。一个200像素长的物体在Box2D看来就有45层建筑那么大。想象下使用一个已调谐好用于模拟玩偶和木桶的引擎去模拟高楼大厦的运动。那并不有趣。

注意

Box2D 已被调谐至 MKS 单位。移动物体的尺寸应该保持在大约 0.1 到 10 米之间。当你渲染场景和角色时, 可能要用到一些比例缩放系统。Box2D自带的testbed例子使用了OpenGL的视口变换。

最好把Box2D中的物体看作移动的广告板, 其上带着你的艺术创作。广告板在一个以米为单位的系统里运动,但你可以利用简单的比例因子把它转换为像素坐标。之后就可以使用这些像素坐标去确定你的精灵(sprites)的位置,等等。

Box2D里的角使用弧度制。物体的旋转角度以弧度方式存储,并可以无限增大。如角度变得太大,可考虑将角度进行规范化。(使用b2Body:SetAngle)。

1.8 工厂和定义

内存管理在 Box2D API 的设计中担当了一个中心角色。所以当你创建一个 b2Body 或一个 b2Joint时, 你需要调用 b2World 的工厂函数(factory functions)。你不应以别的方式为这些类型分配内存。

这些是创建函数:

b2Body* b2World::CreateBody(constb2BodyDef* def)

b2Joint* b2World::CreateJoint(constb2JointDef* def)

这些是对应的摧毁函数:

void b2World::DestroyBody(b2Body*body)

void b2World::DestroyJoint(b2Joint*joint)

当你创建物体或关节时, 需要提供定义(definition)。这些定义包含了创建物体或关节时需要的所有信息。使用这样的方法,我们能够预防构造错误,使函数参数的数量较少,提供有意义的默认值,并减少访问子(accessor)的个数。

fixture必须有父body, 要使用b2Body的工厂方法来创建及摧毁。

b2Fixture* b2Body::CreateFixture(constb2FixtureDef* def)

voidb2Body::DestroyFixture(b2Fixture* fixture)

也有个简便方法直接用形状和密度来创建fixture

b2Fixture* b2Body::CreateFixture(constb2Shape* shape, float32 density)

工厂并不保留定义的引用, 你可以在栈上临时创建定义。

1.9 用户数据

b2Fixture, b2Body 和 b2Joint 类都允许你通过一个 void 指针来附加用户数据。当你测试Box2D, 以及使得Box2D的数据结构跟自己的游戏引擎结合起来, 用void指针是较为方便的。

举个典型的例子, 角色上有刚体, 并在刚体中附加角色的指针, 就构成了一个循环引用。如果你有角色(actor), 你就能得到刚体。如果你有刚体,你就能得到角色。

GameActor* actor =GameCreateActor();

b2BodyDef bodyDef;

bodyDef.userData = actor;

actor->body =box2Dworld->CreateBody(&bodyDef);

一些需要用户数据的例子:

•                    使用碰撞结果给角色施加伤害。

•                    当玩家进入一个包围盒(axis-aligned box)时触发脚本事件

•                    当Box2D通知关节就要摧毁时, 去访问某个游戏结构。

记住,用户数据是可选的,并且能放入任何东西。然而,你需要确保一致性。例如,如果你想在某个body中保存actor的指针,那你就应该在所有的body中都保存actor指针。不要在一个body中保存actor指针,却在另一个body中保存foo指针。将一个actor指针强制转成foo指针,可能会导致程序崩溃。


box2d-as3版 中文教程 1. 导言 1.1 关于 Box2D 是一个用于游戏的 2D 刚体仿真库。程序员可以在他们的游戏里使用它,它可以使物体的运动 更加可信,让世界看起来更具交互性。从游戏的视角来看,物理引擎就是一个程序性动画(procedural animation)的系统,而不是由动画师去移动你的物体。你可以让牛顿来做导演。 Box2D 是用可移植的 C++ 来写成的。引擎中定义的大部分类型都有 b2 前缀,希望这能消除它和你 游戏引擎之间的名字冲突。 1.2 必备条件 在此,我假定你已经熟悉了基本的物理学概念,例如质量,力,扭矩和冲量。如果没有,请先考虑读 一下 Chris Hecker 和 David Baraff (google 这些名字)的那些教程,你不需要了解得非常细致,但他们 可以使你很好地了解一些基本概念,以便你使用 Box2D。 立即下载

相关推荐

Box2D中文手册

Box2D中文手册.Box2D是一个用于游戏的2D刚体仿真库。程序员可以使用它, 让游戏中的物体运动起来更真实, 让游戏世界更具交互性。以游戏的角度来看,物理引擎就是一个程序性动画的系统。

BOX2D深入浅出1:Hello World Box2D .

最近工作需要,在研究BOX2D FLASH物理引擎,在9RIA上看了专题介绍,感觉并不系统,但看到有些朋友翻译过来的文章很是不错,其中。今天找到原文作者关于BOX2D的一系列文章,一共有九篇,我想他们开了一个好头儿,虽然自己的英文水平很烂,但能看懂大概意思,所以打算把余下的几篇,陆续翻译过来,水平实在有限,翻译得不妥的地方,欢迎拍砖,并联系我更正。     HelloWorld再经典不过了,...

hacker47 212

Box2D入门必备书籍

Box2D 是一个用于游戏的 2D 刚体仿真库。程序员可以在他们的游戏里使用它,它可以使物体的运动 更加可信,让世界看起来更具交互性。从游戏的视角来看,物理引擎就是一个程序性动画(procedural animation)的系统,而不是由动画师去移动你的物体。你可以让牛顿来做导演。 Box2D 是用可移植的 C++ 来写成的。引擎中定义的大部分类型都有 b2 前缀,希望这能消除它和你 游戏引擎之间的名字冲突。

Box2D教程4-复杂刚体的复杂外观

Box2D教程1-创建碰撞世界 Box2D教程2-鼠标交互 Box2D教程3-刚体绑定外观 Box2D教程4-复杂刚体的复杂外观 Box2D教程5-碰撞检测 之前我们知道了如何创建标准几何体刚体及其外观,此教程主要解决如何创建复杂刚体的问题。Box2D使用多边形拼接形成复杂的外观。通过前面的教程我们知道使用下面两句来创建一个刚体。b2Body = b2World.createBody...

weixin_30699831的博客 196

Box2D物理游戏编程基础

Box2Dweb物理游戏编程基础,试读版。用浅显易懂的语言讲述物理世界的模拟。

Box2D v2.3.0 用户手册中文版

Box2D v2.3.0 用户手册中文版 推介一下本人的GitHub下的Box2D镜像,相关翻译工作由该镜像维护,欢迎参与 https://github.com/antkillerfarm/box2d

用Box2dAs3做的第一个小游戏

一个星期前看到一个国外的游戏,截图如下: 玩倒是不怎么喜欢玩,但用来做Box2d学习实践很好,如是研究下来自己也做了一个,这个比老外的多一个功能,那就是能显示当前需要删除的矩形。具体如下: 转载于:https://www.cnblogs.com/ywxgod/archive/2010/05/08/1730594.html...

weixin_34006468的博客 101

RTKLIB中RTK定位原理(一)

1 模型 1.1 非差观测值 非差观测值与RTKLIB中PPP定位原理——观测模型部分中一致。 1.2 单间单差观测值 若两个接收机距离较近,经过站间单差,电离层对流层延迟可消除,卫星s的钟差以及初始相位被消除,中依然包含接收机初始相位。 1.3 站间星间双差观测值 经过站间星间双差,接收机钟差及初始相位被消除。 2 EKF参数估计 2.1 EKF法则 EKF法则与RTKLIB中PPP定位原理——观测模型部分中一致。 2.2 状态变量与时间更新 (1)状态变量 在RTK...

papunzal的博客 3811

[Box2D]一.基础概念

点这看效果 世界(World) 你想要通过Box2D物理引擎控制的所有事物必须在世界(World)中。幸运的是,Box2D世界(World)拥有足够大的空间 来容纳你需要的任何事物,所以你无需担心世界(World)的边界(boundaries)。你只需要记住在电脑中的任何事物都 要受到某种限制。所以,越大的世界(World),将会消耗你的电脑越多的资源去管理它

theshen 1498

TouchGFX使用教程(三)

TouchGFX使用教程(三)界面事件控件修改方法图片等资源放置位置 界面事件 控件修改方法 图片等资源放置位置

yuanzhan11的专栏 6971

手把手教你用Python分析OpenFAST仿真结果:pyDatView处理.out文件与数据可视化技巧

本文详细介绍了如何使用Python中的pyDatView工具分析OpenFAST仿真结果,包括数据加载、质量检查、时域与频域分析、多工况对比及自动化报告生成。通过优化技巧和可视化方法,帮助工程师高效处理.out文件,提升风机性能分析的准确性和效率。

weixin_29311017的博客 182

第01章 导言(Introduction)

网上已经有个Box2D用户手册的翻译,但是基于v2.0.1,跟最新手册有很多不对应。 在这里决定将文档的全文再翻译出来,更准确的说是根据网上流传的v2.0.1版本,将最新文档重新整理一遍。 很多内容是直接复制自 Aman JIANG(江超宇)翻译的Box2D v2.0.1 用户手册 Box2D v2.1.0 用户手册 版

MitKey的博客 641

【AAOS】【源码分析】用户管理(五)-- MUMD介绍

MUMD(多用户多屏显示)是Android Automotive OS为车载多乘员场景设计的功能,支持不同座位用户独立操作各自屏幕。

码农的历程 1510

Box2D教程1-创建碰撞世界

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

weixin_30437847的博客 273

VirtualLab初学者教程-1.用户界面

目录前言一、VirtualLab Fusion简介1.软件2.内置工具箱:二、用户界面认识1.上方菜单栏2.右侧面主窗口3.底部窗口附 前言 感觉做VirtualLab的资料不是特别多,可能用的朋友也比较少吧,笔者最近也因为大创需要刚刚开始入门,把网上有的英文资料整理了一下,加了一点自己的内容发出来希望帮助更多在学习中的朋友,有用词不当之处还请多多包涵。 一、VirtualLab Fusion简介 因为是第一讲,简单啰嗦一下软件本身,参考官方介绍。 1.软件 VirtualLab是由德国LightTran

ClaireTang1的博客 2万+

爬取信用中国里面的行政处罚

result字段名为行政处罚文书号、处罚决定日期、处罚内容、处罚金额、违法事实、处罚机关、公司名称,行政处罚次数。file_path=r'E:\Data analyze\python\行政处罚爬虫/'#路径需要按实际修改。writer = pd.ExcelWriter('统计.xlsx')# 写入Excel文件。src_workbook=file_path+r'行政处罚(名单).xls' #表格名称也要更改。# keyword = input("输入爬取的公司全称必须是全称")

qq_42863025的博客 1674

CocosCreator 物理引擎中的碰撞平面的法线

CocosCreator使用的是box2d.js物理引擎,碰撞平面法线方向必须取反 private onBeginContact(contact:cc.PhysicsContact,selfCollider:cc.PhysicsCollider,otherCollider:cc.PhysicsCollider):void{ let normal=contact.getWorldMani...

kingBook928的博客 2793

EMC设计技巧及经验总结3:TVS的使用

Way back in undergrad circuits class(回到本科时的电路课程), our TA(助教) loved to give uslittle “black box” circuits. We’d measure the voltage and current characteristics, then have to determine what compone

snmplink的博客 2410

Box2D资源

Box2D 当前位置:首页→专题首页→专题列表→Box2D 目录  [隐藏] 1 专题总编2 专题图片3 专题简介4 专题文章列表 4.1 官方4.2 天地会资料4.3 其他 专题总编 smallghost 专题图片 专题简介 Box2D是一个用于游戏的2D刚体仿真库。它

狐说霸道 888

基于YOLOv8与UI界面的校园垃圾分类督导系统

YOLO(You Only Look Once)是目前最为广泛使用的目标检测算法之一。它通过一次前向传递即完成目标检测,具有极高的速度与效率。YOLOv8是YOLO系列的最新版本,相比于之前的YOLO版本,YOLOv8在速度、精度、检测能力等方面都有了显著的提升。本项目通过结合YOLOv8模型与UI界面,成功实现了校园垃圾分类督导系统。该系统能够自动识别不同类型的垃圾,并通过UI界面实时展示垃圾分类的结果。

YOLO 337

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

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

(老文章)Box2D新手入门顺阶教程 一、 HelloWorld 开始之前,我假想你已经看过了HelloWorld的源代码,并看了用户手册中关于HelloWorld的相关说明,而且已经大致明白了大多数内容。  因为我一直在有道笔记中存储各种教程 故提供了下面的链接. 点我,会跳转到有道云笔记 !!!!!  全文链接

wcx327038192的专栏 568

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

【Unity知识速递】第7期 Unity 6.6 深度解析:WebGPU 正式版与 WebAssembly64,Web 游戏的内存革命

如何启用 Wasm64?需要注意的是,Wasm64 需要浏览器支持 Memory64 提案,目前主流浏览器的最新版本都已支持。一句话总结: Unity 6.6 用 WebGPU 转正、Wasm64 16GB 内存和渐进式加载三连击,将 Web 游戏的体验天花板又往上推了一大截——Web 平台不再是"妥协版",正在成为真正的一等公民。Unity 6.6 新增了 WebAssembly64(Wasm64) 构建选项,这可能是本次更新中对 Web 游戏开发者影响最大的一项升级。

crystal_WJT的博客 393

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

上一篇: 编程语言只是种工具?
下一篇: Box2D v2.1.0用户手册翻译 - 第02章 Hello Box2D
complex_ok
博客等级 码龄17年 71粉丝 12原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值