Box2DFlash筆記(三)--鼠標移動事件實現

聲明:歡迎任何人和組織轉載本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中。歡迎大家指正錯誤,以及討論這些知識。

<script src="http://s.vdoing.com/u/107/54977.js" type="text/javascript"></script>

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章