我有一個通用的應用程序,其中一個部分就是用戶必須拖動一個或多個項目的鍛鍊(文字爲主,但圖像可能是可能的)和如下所示將其放入一個盒子中。手動拖放在Flex 4中,同時避免與其他拖拽元素碰撞
http://eastblue.org/dragdropexample.png
盒子是BorderContainer
自定義子類。 每個可拖動的項目(的RichText
一個子類)被使用startDrag()
在MouseEvent.MOUSE_DOWN
回升。當它在MOUSE_UP
上獲得釋放時,它會使用this.hitTestObject(box)
檢查它是否碰到該框,如果它沒有命中,則將動畫恢復到開始位置。如果它確實打了,我們做
stopDrag();
this.x = e.stageX; // e is the MouseEvent
this.y = e.stageY;
它工作得很好。這種方法的問題在於可拖動的物品可能相互碰撞,而且看起來不太漂亮。
我想避免拖動項目在相互碰撞,並在同一時間確保它們保持箱內。
我認爲有兩種方式解決這個:
創建某種箱內電網,確保各個網格大到足以容納最大可拖動項目,有項目出現在最接近的免費網格廣場。
問題在於盒子和每個可拖動的項目可以是任意大小,並且可以有任意數量的可拖動項目,所以確保用戶可以將每個項目放入盒子內有點麻煩,如果他想要並仍然保持它看起來沒問題。
檢查每個被丟棄的物品是否已經落入該物品的所有其他物品中,如果它們發生碰撞,請將新丟棄的物品移動到其中一個方向上,直到它們不再相互碰撞。
這裏的問題是藏在心裏的盒子裏面,而不是被陷在一個循環試圖在一個不可能的方向移動。而如果沒有辦法可以將移動?
我錯過了一些明顯的方法,或者更簡單的方法嗎?如果不是,我該如何儘可能簡單地實現?
有些碰撞可能是正確的,因爲用戶將無法與這些練習一個花費太多的時間,但是現在的工作方式他們幾乎似乎求得對方出來,可怕的崩潰。
我最終加入了'Scroller'包裝一'Group'的'BorderContainer'內,給予該'Group'一個'TileLayout'。然後將拖動的項目添加到「組」中,從而獲得相當不錯的結果。 不太喜歡滾動條,或者當我拖入或滑出某些東西時,有時會調整大小,但當我事先不知道大小時,我想這很難避免。 – PerfectlyNormal