让刚体听我的——ApplyForce、ApplyImpulse、SetLinearVelocity

作者: ladeng6666 分类: Box2D 发布时间: 2012-06-22 06:46 阅读: 25,605

对于大部分游戏来说,允许玩家控制游戏对象,是个非常基本的特性。而到目前为止,在学到的Box2D技巧中,创建了刚体之后,我们只能眼睁睁的看着它自由落体。我想,你肯定迫不及待的想“占有”它了,别急,今天我们就来学习一下,如何让刚体听我们的。

Box2D中控制一个刚体,让它乖乖的听我们的话,有三种方法:ApplyForce、ApplyImpulse和SetLinearVelocity。它们都是b2Body类的公共方法,而且它们都接收一个b2Vec2类型向量参数。关于向量的知识,请参考我之前发的文章”【游戏基础】向量基础“.

1.力,循序渐进——ApplyForce

顾名思义,ApplyForce方法会在刚体上施加一个力。学过物理力学的同学都知道,F=ma,有了力F就有了加速度a,有了加速度,物体就会有速度,就会慢慢动起来。(但是不会立马动起来,因为力不会直接影响速度)。

举个简单的例子,小明推一个静止的箱子,箱子不会立马飞出去,而是慢慢的、越来越快的动起来(减速也一样)。

2.速度,叠加——ApplyImpulse

与ApplyForce不同,ApplyImpulse不会产生力,而是直接影响刚体的速度。通过ApplyImpulse方法添加的速度会与刚体原有的速度叠加,产生新的速度。

3.一触即发——SetLinearVelocity

setLinearVelocity与ApplyImpulse一样,直接影响刚体的速度。不一样的是,setLinearVelocity添加的速度会覆盖刚体原有的速度。不过,在SetLinearVelocity方法不会自动唤醒sleeping的刚体,所以在调用该方法之前,记得将刚体body.wakeUp()一下。

在下面的实例的右上角,任意选择其中一种方法,交替按下键盘左右方向键,查看三种方法的区别。

关于三个方法的用法,源代码中已经有详细的备注,我就不再解释了:

源代码下载

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!

18条评论
  • wssmrw

    2012 年 7 月 20 日 上午 3:03

    最近正在看box2d,看到您的博客,实在是太高兴了。
    等您讲完box2d,能再讲将away3d不。

    1. ladeng6666

      2012 年 7 月 21 日 上午 9:30

      真的在准备学习away3d,应该会的

  • zhaojilong

    2012 年 9 月 27 日 下午 2:03

    期待away3d 。。。 螺柱加油

  • jessica

    2012 年 11 月 11 日 下午 6:16

    请问 速度的叠加是向量的叠加吗?

    1. ladeng6666

      2012 年 11 月 11 日 下午 11:02

      是的,关于向量的知识,我们在isSensor创建感应区域里讲到过

  • nono

    2013 年 5 月 30 日 下午 3:55

    为什么我用 SetZero 这个按键盘松开的时候物体还是做加速运动呢

  • tanti

    2013 年 7 月 4 日 上午 8:25

    力也是不叠加的,对吧

  • 蓝色的缘分

    2014 年 10 月 12 日 下午 8:34

    学习了,刚接触Box2D还是一头雾水。
    想请教拉灯老师,能不能使用声音波形快照或声音通道来影响刚体的重力,就是说用声音使刚体运动。

    1. ladeng6666

      2014 年 10 月 12 日 下午 9:11

      可以的,只要将声音的数据转换成数值,就可以作为作用力来影响刚体运动

  • 蓝色的缘分

    2014 年 10 月 12 日 下午 9:54

    谢谢,我试试看

  • 蓝色的缘分

    2014 年 10 月 13 日 上午 12:19

    呵呵!能随声音跳动了,但有点乱可能是帧频的问题,有时间再弄弄。

    1. ladeng6666

      2014 年 10 月 15 日 下午 5:36

      你说的乱指的是刚体发生漂移的现象吗?那个应该跟帧频没有关系的

      1. 蓝色的缘分

        2014 年 10 月 15 日 下午 7:35

        是没有实现根据形状分配重力,我发源文件请你给看看改改行吗?行的话晚些发网盘传给你。

        1. ladeng6666

          2014 年 10 月 16 日 下午 6:33

          可以,发我邮箱吧,ladeng6666@163.com

          1. 蓝色的缘分

            2014 年 10 月 16 日 下午 7:56

            你好!已发邮伯。

          2. ladeng6666

            2014 年 10 月 17 日 上午 7:38

            已经在邮件里回复你了,注意查收!
            主要问题是你没有应用文中的三个函数,而是直接更新了贴图

      2. 蓝色的缘分

        2014 年 10 月 15 日 下午 9:52

        上传了源文件百度盘,有时间给看看;解开我注释掉的文档类97行测试,可能更容易看出问题:
        http://pan.baidu.com/s/1o6wn1yE

  • Pingback: HTML5物理游戏开发 – 越野山地自行车(二)创建一辆可操控的自行车 | 游戏开发者

发表评论

电子邮件地址不会被公开。 必填项已用*标注