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()将它添加到舞台上。

ActionScript
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中定义的下面几个常量:

ActionScript
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,如:

ActionScript
1
            debugDraw.SetFlags(b2DebugDraw.e_shapeBit | b2DebugDraw.e_jointBit);

在下面的示例中,我们用Box2D 关节——”马达关节” b2RevoluteJoint演示了各个选项的功能,点击右边的选项试试看他们的效果。

到这里,b2DebugDraw的用法就讲完了,明白了吗?如果你还有其他的问题,欢迎给我留言,我们一起讨论,或者关注我的新浪微博ladeng6666,及时了解我的最新文章。

喜欢我的教程,就点击下面的星星给文章打分吧,让我更好的了解大家都喜欢哪一些教程,我会尽量多写一些!

标签: b2debugDraw, Box2D发表评论
分享到:0
 (22 votes, average: 5.00 out of 5)
评论 (0)引用 (0)(订阅这个帖子上的评论)

还没有评论.

Leave a comment

姓名 (required)

电子邮件 (required)

站点

Spam protection: Sum of 10 + 3 ? *

b2DebugDraw到底是什么相关推荐

  1. 路由器的千兆是什么意思_千兆赫兹ghz到底是什么意思

    路由器的千兆是什么意思 The term "gigahertz" is composed of two parts, "giga" and "hert ...

  2. 关于box2d相关学习教程记录一下

    Box2D 2.0.1版本 认识Box2D世界 掉落的苹果--b2Body刚体 创建圆形刚体 创建静止不动的刚体 在运行时创建刚体 刚体的上衣--b2BodyDef.userData Box2D能再简 ...

  3. [转载]Tensorflow 的reduce_sum()函数的axis,keep_dim这些参数到底是什么意思?

    转载链接:https://www.zhihu.com/question/51325408/answer/125426642 来源:知乎 这个问题无外乎有三个难点: 什么是sum 什么是reduce 什 ...

  4. 硬核科普:到底啥是云原生?

    本文主要根据课程 什么是云原生?_哔哩哔哩_bilibili 总结而来,其他参考文章如下: <云原生人才计划之Kubernetes 技术图谱>发布! - 知乎 (zhihu.com) ku ...

  5. 深度学习到底有哪些卷积?

    深度学习到底有哪些卷积? 深度学习中不同种类的卷积(比如 2D / 3D / 1x1 /转置/扩张(Atrous)/空间可分/深度可分/平展/分组/混洗分组卷积),能帮理解实际的工作方式. 总结深度学 ...

  6. 做技术到底可以做到哪种地步-技术为什么越走越窄 (转)

    尽管做技术已经有不少年头了,不管是犹犹豫豫还是坚定不移,我们走到了现在,依然走在技术这条路上. 不管我们处于何种职位,拿着哪种薪水,其实,我们会是不是的问问自己"做技术到底可以做到那种地步& ...

  7. Django-C002-深入模型,到底有多深

    此文章完成度[100%]留着以后忘记的回顾.多写多练多思考,我会努力写出有意思的demo,如果知识点有错误.误导,欢迎大家在评论处写下你的感想或者纠错. ORM介绍:对象关系映射(英语:(Object ...

  8. Web service到底是什么?

    Web service到底是什么:在什么情况下你应该使用Web service. 分布式应用程序和浏览器 研究一下当前的应用程序开发,你会发现一个绝对的倾向:人们开始偏爱基于浏览器的瘦客户应用程序.这 ...

  9. Android:JNI 与 NDK到底是什么

    前言 在Android开发中,使用 NDK开发的需求正逐渐增大 但很多人却搞不懂 JNI 与 NDK 到底是怎么回事 今天,我将先介绍JNI 与 NDK & 之间的区别,手把手进行 NDK的使 ...

最新文章

  1. Linux内核网络数据包发送(二)——UDP协议层分析
  2. shell调用python函数_shell调用python函数
  3. 阿里巴巴400集python教程_递归的练习课程 | Python从入门到精通:高阶篇之十二-阿里云开发者社区...
  4. 【Spring】Spring第二天 - AOP 详解、动态代理设计模式(JDK和cglib)
  5. 掌握这四点核心思想,统计学才算入门
  6. 你的专业 VS 你妈口中你的专业
  7. [蓝桥杯2018初赛]第几天-日期计算(水题)
  8. Orion:谷歌的新一代SDN控制器
  9. [转]我的数据结构不可能这么可爱!——珂朵莉树(ODT)详解
  10. C语言丨线性表(四):循环链表
  11. 为什么软件开发这么难?
  12. windows下Qt5.4.2 for android开发环境配置
  13. 解决vbox挂载VBoxGuestAdditions失败
  14. 阿里云对象存储OSS简介和使用
  15. 需求(Java):使用Jsoup获取知乎网页的信息,信息如下:
  16. 2021级新生个人训练赛第37场
  17. sudo vim找不到
  18. 商科能读计算机专业吗,我本科读的计算机 想去新西兰留学可以换专业吗? 没分了跪求啊,...
  19. 0725(016天 多态复习 java中级-抽象类01)
  20. 树莓派改造成通用计算机,218元!树莓派电脑板成功改造完整便携式电脑(图)...

热门文章

  1. CCProcxy代理服务器的配置使用
  2. Walfisch-Ikegami模型 建筑物的高度、建筑物间的距离、街道宽度对传输损耗的影响
  3. C语言应用宏定义解决三角形的面积问题
  4. 一天进步一点点 LDAP协议和AD的概念
  5. 大话数据结构之树(下)
  6. 罗辑思维--得到App--一面
  7. 【最全】软件测试基础理论选择题(含答案)
  8. php MySQL忘记密码了_Mysql 忘密码 + Phpadmin 修改密码无法登陆
  9. 通讯录管理系统 课程设计报告(上交版)
  10. 3 Java的主要特点