我在舞臺上有一個Sprites數組,並且想要現在限制它們的矩形。我可以做一個循環並檢查每個元素的getBounds(),但這可能在計算上很昂貴。有沒有更好的方法來做到這一點?圍繞一組DisplayObject計算邊界框的最佳方法是什麼?
0
A
回答
1
0
通過維護兩個數組,一個用於像素行,另一個用於像素列,您可以隨着時間的推移擴展此操作的負載,因此對於800x600階段,您將有一個800個元素的xBounds數組,一個由600個元素組成的yBounds數組。
每個數組的每個元素都是一個引用數組,該引用對所有具有落在該像素上的邊界的精靈(如果沒有使用該列/行,則爲null)。所以,每個精靈在每個數組中都會有兩個條目;一個用於最小x界限,一個用於最大如果您移動,調整大小,旋轉或以其他方式更改精靈的邊界,則必須通過從兩個列表中刪除最小值和最大值的舊值並添加它們來更新這些列表在新的職位上。
這樣,屏幕上所有精靈的總界限就是這兩個數組中每個數組中最低和最高的使用索引。
對於額外的速度,你很可能也想存儲x和y的最小值和最大值,並且只有在精靈動作改變它們時才更改它們。所以,如果一個精靈被放置在最小值或最大值以上,你可以用一個簡單的賦值來更新新的最小值或最大值;並且如果精靈是當前最小列的數組中唯一的元素,並且移動得更高,那麼您將從舊分鐘開始循環,直到精靈的新位置,並將新分鐘設置爲第一個佔用數組元素(和最大列相同但相反)。
使用數組時,此解決方案將使用幾kb的內存,偶爾需要循環部分數組。更理想的情況是,你可以用一個「排序列表」類替換數組:可能不值得開發者/維護者花費額外的複雜時間,但使用某種形式的自平衡二叉樹可能會增加一點速度並節省一點內存,如果你有很多精靈,那麼這很重要,經常移動,大屏幕,慢CPU和小內存。
無論哪種方式,請務必處理數組爲空的情況,因爲沒有精靈顯示。
0
var child:DisplayObject = ...
var parent:DisplayObject = new Sprite(); // should be the parent object.
var bounds:Rectangle = child.getBounds(parent)
相關問題
- 1. 圍繞羣組的邊界
- 2. 什麼是增強庫中計算Voronoi圖的邊界框
- 3. 計算公式結果的最佳方法是什麼?
- 4. 使用Flex計算年齡的最佳方法是什麼?
- 5. 從結果中計算日期的最佳方法是什麼?
- 6. 什麼是計算功能限制的最佳方法?
- 7. 在VB.NET中計算詞頻的最佳方法是什麼?
- 8. 什麼是計算時間跨度的最佳方法?
- 9. 計算一組點的散列碼的最佳方式是什麼?
- 10. 什麼是設計和更改GTK界面的最佳方式?
- 11. 爲對象檢測創建邊界框的最佳方法
- 12. 計算器鍵盤算法最簡單的方法是什麼?
- 13. 如何計算d3中一組點的傳單的邊界框
- 14. 圍繞div的半邊框
- 15. 圍繞DIV的邊框
- 16. 圍繞html div的邊框
- 17. 實現此算法的最佳方法是什麼?
- 18. 圍繞django版本添加邏輯的最佳方式是什麼?
- 19. 編程數學計算的最佳做法是什麼?
- 20. 在網頁html上創建邊框的最佳方法是什麼?
- 21. 在舞臺周圍繪製邊框的最簡單方法是什麼?
- 22. 什麼是計算直線最小斯坦納樹的最佳算法?
- 23. 評論的最佳方法是什麼?
- 24. 圍繞EditFields的邊界 - 黑莓
- 25. 圍繞TBitmap繪製點的邊界線?
- 26. 什麼是計算每天改變數值的公式的最佳方法?
- 27. Objectify/AppEngine:計算查詢返回的對象數的最佳方法是什麼?
- 28. 在LinearLayout中實現動態邊界的最佳方式是什麼?
- 29. 計算Tensorflow中的邊界框重疊
- 30. 計算邊界框的頂點
多少的精靈,我們談論?幾十,幾百? – grapefrukt 2010-01-27 15:34:53
現在它沒有那麼多(所以我可以循環每一個,找到他們的X/Y/W/H,並使用這些),但我正在尋找一個優雅的解決方案。我相信像碰撞檢測算法這樣的人可能會有東西可以使用 – Arpit 2010-01-27 22:28:44