Box2DFlash笔记(三)--鼠标移动事件实现
2009-04-13 22:56 libiver 阅读(213) 评论(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中。欢迎大家指正错误,以及讨论这些知识。