运行时绘制Nape刚体

作者: ladeng6666 分类: Nape 发布时间: 2012-12-09 10:43 阅读: 10,375

创建简单的Nape刚体中,我们学会了简单矩形和圆形刚体的实现方法。今天我们进一步学习,如何在SWF运行时绘制这些刚体。

所谓运行时绘制刚体,就是根据鼠标的坐标与移动,动态的绘制这些刚体。实现这个过程的重点,是计算出刚体的坐标以及尺寸(如矩形的宽高、圆形的半径),而这些坐标和尺寸是根据鼠标的位置和动作计算出来的,大体步骤如下:

  1. 鼠标按下:记录当前鼠标坐标为刚体的坐标x、y。
  2. 鼠标滑动:根据鼠标的坐标以及刚体的坐标计算刚体的尺寸,如矩形的宽高w、h。并实时的绘制对于的图形。
  3. 鼠标弹起:根据前两部计算出来的刚体坐标x、y和尺寸,动态绘制刚体。

大体过程就是这样的啦,看看下面的示例,我想应该可以更加清楚明了。

点击鼠标开始绘制图形,松开鼠标后创建于图形相同形状的刚体。默认绘制的图形是矩形,绘制的同时按下Ctrl键是圆形刚体,按下Shift键是5边形。

Sorry, either Adobe flash is not installed or you do not have it enabled

完整的代码和注释如下:

 

值得一提的是第97-104行的createRegular()方法,这里用到了Polygon的静态方法regular()来创建一个规则的5边形刚体,除了regular之外,Polygon的静态方法还是box和rect,它们都会返回一个由顶点组成的数组,然后传递给Polygon对象,创建多边形shape,具体的用法分别如下:

  • rect:创建一个注册点在x,y位置的矩形,除了要指定width和height之外,还要指定矩形注册点x,y,
  • box:创建一个注册点在中心点的矩形,这个方法,只需要指定刚体width和height即可。相当于rect(0,0,width,height)
  • regular:创建宽为width,高为height,顶点数为edgeCount的规则多半形,例如三角形,以及本例中的五边形。这是Box2D没有的功能,在Box2D中需要自定义顶点才能创建类似的多边形。

源文件下载地址

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

17条评论
  • 小三的小三

    2012 年 12 月 9 日 下午 11:20

    膜拜一下大神..嘿嘿。

    拉登大哥,给力啊…..

    1. ladeng6666

      2012 年 12 月 10 日 下午 9:23

      谢谢关注,期待你的继续支持!

  • 942

    2012 年 12 月 27 日 上午 10:29

    BitmapDebug和ShapeDebug有什么区别呢?是将图形转成Bitmap类型,以减少生成矢量图对cpu减少开销么?

  • 942

    2012 年 12 月 27 日 下午 7:32

    Stats()这个类貌似找不到了。。。
    今天下午一直在纠结那个五边形的坐标计算。哎,初中的数学都忘光了!悲剧

  • Pingback: 用Body.graphic属性实现Nape刚体贴图 « Ladeng6666-专业的Flash/AS3爱好者
  • 流年

    2013 年 7 月 22 日 下午 1:58

    拉登大叔,我发现一个bug

    1. ladeng6666

      2013 年 7 月 25 日 下午 9:41

      什么Bug?

  • 心、包子

    2013 年 9 月 15 日 下午 4:39

    画矩形如果画成一条线的话就会出错!

    1. 大谷

      2014 年 7 月 24 日 下午 5:41

      在77行createBody生成刚体前先if一下bodyInfo.w, bodyInfo.h以及bodyInfo.r是不是大于0即可,不然确实会报错。
      135行的那段if因此就可以略掉了。

      1. 大谷

        2014 年 7 月 25 日 上午 2:07

        更正一下,w和h应该是判断!=0,负数也可。

        1. 大谷

          2014 年 7 月 25 日 上午 2:39

          只有矩形的情况下需要判断w和h……

        2. ladeng6666

          2014 年 7 月 25 日 下午 10:53

          谢谢更正,错误难免,还需要大家的监督啊!

          1. 大谷

            2014 年 7 月 26 日 上午 12:11

            感谢拉登大叔!~ 教程太有爱了!

  • ladeng6666

    2014 年 7 月 28 日 上午 9:19

    谢谢关注,我会继续写更多Nape教程的!

  • 周超

    2015 年 1 月 31 日 下午 2:05

    演示SWF 有个小问题,当我画一个很小很小的东西时,或者直接单击之后就画不出矩形了,能显示出绘制区域,但是松开鼠标之后没有生成矩形

    1. ladeng6666

      2015 年 1 月 31 日 下午 3:01

      不会吧,我在第135~139行的代码中,有针对绘制尺寸过小时,设置矩形尺寸默认为3*4,所以,理论上不会出现你说的情况。如果我的回答没有解答你的疑问,你可以截图后发邮件到ladeng6666@163.com,谢谢关注!

      1. 周超

        2015 年 2 月 3 日 上午 8:52

        重新试了一下,是上条评论的层主发的问题,就是我鼠标按下之后水平或者垂直移动时画出来的是一条线,可能获取的宽或者高是0,所以没有画出刚体。之后就生成不了刚体了。

发表评论

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