b2DebugDraw到底是什么
http://www.ladeng6666.com/blog/category/box2d/
b2DebugDraw到底是什么
我们已经学了很多关于Box2D的知识了,但是没仔细研究过天天都在用的b2DebugDraw类。前些天有网友问到,今天我们就来学习一下它的用法。
众所周知,Box2D是一个2D物理引擎。所谓引擎,就像汽车的马达,我们也叫它引擎,是整个制动系统的核心。但是只有马达引擎,汽车是动不了的,还要有车轮(废话)。车轮也不是直接安装在马达上的,它们通过车桥连接到马达上。
我们知道,在创建Box2D应用时,必须有一个Sprite对象。这个sprite对象和b2DebugDraw、Box2D引擎之间的关系就像是车轮、车桥和汽车之间的关系。没有车桥,马达和车轮连不起来,汽车就动不了。同样的,没有b2DebugDraw类,Box2D和Sprite也连不起来,我们就看不到物理模拟过程。
请看下面的图示
明白了吧?好吧,我们讲的再具体一点。
b2Body是Box2D的核心对象,打开b2Body.as源文件(如以下代码),可以看到它并不是DisplayObject的子类,也就意味着我们无法通过addChild()将它添加到舞台上。
1
2
3
4
5
6
7
8
9
10
11
12
|
// Constructor
/**
* @private
*/
public function b2Body(bd:b2BodyDef, world:b2World){
m_flags = 0;
if (bd.bullet )
{
m_flags |= e_bulletFlag;
//.............................
|
实际上,Box2D只是集成了各种算法,对b2Body对象进行物理模拟计算,并将计算结果存储到这个对象中。所以理论上,我们可以访问b2Body的这些属性(如x、y、顶点等),然后用AS3绘图API绘制模拟结果。但这是非常繁琐的,我们要遍历所有的刚体、关节,以及他们的坐标、角度、顶点等信息。反正我是不想去做这些动作。所以Box2D为我们准备了b2DebugDraw类,只要用b2DebugDrawSprite()方法绑定一个Sprite对象,Box2D就帮我们在这个Sprite中,用绘图API(如lineTo、beginFill等)绘制出模拟图形。
另外,b2DebugDraw还可以用setFlag()方法选择性的绘制Box2D对象的内容。这样可以节省CPU开支。setFlag()方法有一个16进制的参数,这参数的取值只能是b2DebugDraw中定义的下面几个常量:
1
2
3
4
5
6
7
8
9
10
11
12
|
/** Draw shapes */
static public var e_shapeBit:uint = 0x0001;
/** Draw joint connections */
static public var e_jointBit:uint = 0x0002;
/** Draw axis aligned bounding boxes */
static public var e_aabbBit:uint = 0x0004;
/** Draw broad-phase pairs */
static public var e_pairBit:uint = 0x0008;
/** Draw center of mass frame */
static public var e_centerOfMassBit:uint = 0x0010;
/** Draw controllers */
static public var e_controllerBit:uint = 0x0020;
|
另外,我们还可以用"或"运算符,同时使用多个Flag,如:
1
|
debugDraw.SetFlags(b2DebugDraw.e_shapeBit | b2DebugDraw.e_jointBit);
|
在下面的示例中,我们用Box2D 关节——”马达关节” b2RevoluteJoint演示了各个选项的功能,点击右边的选项试试看他们的效果。
到这里,b2DebugDraw的用法就讲完了,明白了吗?如果你还有其他的问题,欢迎给我留言,我们一起讨论,或者关注我的新浪微博ladeng6666,及时了解我的最新文章。
喜欢我的教程,就点击下面的星星给文章打分吧,让我更好的了解大家都喜欢哪一些教程,我会尽量多写一些!
还没有评论.
Leave a comment
姓名 (required)
电子邮件 (required)
站点
Spam protection: Sum of 10 + 3 ? *
b2DebugDraw到底是什么相关推荐
- 路由器的千兆是什么意思_千兆赫兹ghz到底是什么意思
路由器的千兆是什么意思 The term "gigahertz" is composed of two parts, "giga" and "hert ...
- 关于box2d相关学习教程记录一下
Box2D 2.0.1版本 认识Box2D世界 掉落的苹果--b2Body刚体 创建圆形刚体 创建静止不动的刚体 在运行时创建刚体 刚体的上衣--b2BodyDef.userData Box2D能再简 ...
- [转载]Tensorflow 的reduce_sum()函数的axis,keep_dim这些参数到底是什么意思?
转载链接:https://www.zhihu.com/question/51325408/answer/125426642 来源:知乎 这个问题无外乎有三个难点: 什么是sum 什么是reduce 什 ...
- 硬核科普:到底啥是云原生?
本文主要根据课程 什么是云原生?_哔哩哔哩_bilibili 总结而来,其他参考文章如下: <云原生人才计划之Kubernetes 技术图谱>发布! - 知乎 (zhihu.com) ku ...
- 深度学习到底有哪些卷积?
深度学习到底有哪些卷积? 深度学习中不同种类的卷积(比如 2D / 3D / 1x1 /转置/扩张(Atrous)/空间可分/深度可分/平展/分组/混洗分组卷积),能帮理解实际的工作方式. 总结深度学 ...
- 做技术到底可以做到哪种地步-技术为什么越走越窄 (转)
尽管做技术已经有不少年头了,不管是犹犹豫豫还是坚定不移,我们走到了现在,依然走在技术这条路上. 不管我们处于何种职位,拿着哪种薪水,其实,我们会是不是的问问自己"做技术到底可以做到那种地步& ...
- Django-C002-深入模型,到底有多深
此文章完成度[100%]留着以后忘记的回顾.多写多练多思考,我会努力写出有意思的demo,如果知识点有错误.误导,欢迎大家在评论处写下你的感想或者纠错. ORM介绍:对象关系映射(英语:(Object ...
- Web service到底是什么?
Web service到底是什么:在什么情况下你应该使用Web service. 分布式应用程序和浏览器 研究一下当前的应用程序开发,你会发现一个绝对的倾向:人们开始偏爱基于浏览器的瘦客户应用程序.这 ...
- Android:JNI 与 NDK到底是什么
前言 在Android开发中,使用 NDK开发的需求正逐渐增大 但很多人却搞不懂 JNI 与 NDK 到底是怎么回事 今天,我将先介绍JNI 与 NDK & 之间的区别,手把手进行 NDK的使 ...
最新文章
- Linux内核网络数据包发送(二)——UDP协议层分析
- shell调用python函数_shell调用python函数
- 阿里巴巴400集python教程_递归的练习课程 | Python从入门到精通:高阶篇之十二-阿里云开发者社区...
- 【Spring】Spring第二天 - AOP 详解、动态代理设计模式(JDK和cglib)
- 掌握这四点核心思想,统计学才算入门
- 你的专业 VS 你妈口中你的专业
- [蓝桥杯2018初赛]第几天-日期计算(水题)
- Orion:谷歌的新一代SDN控制器
- [转]我的数据结构不可能这么可爱!——珂朵莉树(ODT)详解
- C语言丨线性表(四):循环链表
- 为什么软件开发这么难?
- windows下Qt5.4.2 for android开发环境配置
- 解决vbox挂载VBoxGuestAdditions失败
- 阿里云对象存储OSS简介和使用
- 需求(Java):使用Jsoup获取知乎网页的信息,信息如下:
- 2021级新生个人训练赛第37场
- sudo vim找不到
- 商科能读计算机专业吗,我本科读的计算机 想去新西兰留学可以换专业吗? 没分了跪求啊,...
- 0725(016天 多态复习 java中级-抽象类01)
- 树莓派改造成通用计算机,218元!树莓派电脑板成功改造完整便携式电脑(图)...