代码改变世界

Box2DFlash笔记(三)--鼠标移动事件实现

2009-04-13 22:56  libiver  阅读(211)  评论(0编辑  收藏  举报

声明:欢迎任何人和组织转载本blog中文章,但必须标记文章原始链接和作者信息。

本文链接:http://blog.csdn.net/li_007/archive/2009/04/13/4071104.aspx

开拓进取的小乌龟------->CSDN点滴点点滴滴Blog

这段时间在研究Box2DFlash这个开源APE,现在分享一下Box2DFlash中鼠标实现的方法。在Box2DFlash自带的TestBed中就实现了鼠标事件和键盘事件,其实就是Actionscript 3键鼠事件,然后结合一下Box2DFlash。关于怎么实现鼠标移动,可以说是对研究APE必须弄清楚的,不然就不要玩APE了。

1、首先肯定就是Actionscript 3的鼠标监听事件了,这是基本,不然怎么交Box2D Flash版啊。在这里我们需要监听MOUDSE_DOWN这个事件的,在Box2DFlash中是这样实现的,当我我们按下鼠标的时候,以当前鼠标坐标点建立一个Shape(实际上只是一个框框,也就是一个域,范围),很小很小的shape(0.001有效位);然后遍历当前World中所有的Body,查找与刚建立的Shape有重叠的body,返回一个包含这个body的数组(其实只有一个,因为都是body,刚体,这是我的理解);再其次就是循环这些body,测试当前鼠标点是否在此body有效范围中(也即是确认那个body被点击了),然后返回符合条件的body,中止循环。关于这个功能的实现的GetBodyAtMouse函数实现如下:

2、当我们得到了当前点击的body后,通过建立一个b2MouseJoint对象,在这里翻译成“鼠标关节”吧,让这个鼠标关节的一个物体为从b2World的GetGroundBody得到的没有碰撞检测形状的静态body,问另一个body则连接上被点击的body,然后不但更新这个鼠标关节的target位置为当前鼠标位置,这样就间接实现了物体被鼠标拖动了。代码如下:

3、好了,然后我们不但更新这个b2MouseJoint对象的坐标点就可以了,其实就是随着时间步中更新。

整个工程代码如下:(直接建立Actionscript 3的工程,用下面代码做文档类即可看到结果)

BTW:不知道么时候CSDN可以直接上传SWF到blog中。欢迎大家指正错误,以及讨论这些知识。