2011-05-10 91 views
0

我正在創建一個計劃應用程序,該應用程序在2周的日曆時間軸上顯示項目(包裹在畫布中)。如果用戶決定將項目移動一天,我需要檢查移動項目是否會與其他任何現有項目重疊。如果是這樣,兩個項目中的一個需要沿着y軸向下移動屏幕,直到兩個項目不再重疊。Flex 3:碰撞檢測和碰撞後移動對象

我已經創建了一個通過它來創建項目repeater項目循環的功能......這個函數的最終結果是,擁有一個ArrayCollection:

0. the id number within the repeater 
1. the project title 
2. x coordinate 
3. y coordinate 
4. the width of the project 
5. the height of the project 

我還創建了一個函數,它接受數組集合中的兩個對象並確定它們是否重疊。

但是,我不能弄清楚通過數組集合的工作循環,比較其中的每個項目,檢查它們是否重疊,如果它們重疊則移動項目,然後繼續到下一個項目。

此外,我需要確保移動一個項目不會使它與另一個重疊。

任何想法?

編輯

想通了......我 最終使每個項目的任何移動時的y值重置每個元素爲0,然後重新評估他們是否發生碰撞。

回答

1

由於項目的性質,這是非常難以回答的,因爲每次交互都會導致項目的性質不同。

就這樣說,如果是我,我會試着去完全數據驅動的方法。有一個'項目日曆'對象,它存儲所需的所有信息(主要是開始和結束時間戳,因爲它們是通用的),然後將其放置在一個有意義的數據結構中,可以是數組或雙向鏈接的訂單列表時間表。

從那裏開始限制數據下一個(或前一個)項目的開始和結束時間之間的移動。您需要一個自定義組件才能將時間戳轉換爲用戶可表達的內容。

我在過去做過類似的事情,至少可以說這不是一件容易的事。祝你好運。

+0

我正在考慮運行一個for循環,比較當前項目只有它在數組集合後的項目,並移動目前正在查看的項目(如果你願意的話,「我」對象)... – Brds 2011-05-10 17:32:29