簡體   English   中英

WPF 動畫,檢查重疊?

[英]WPF animation, check for overlapping?

注意:請務必閱讀讓我們在聊天中繼續討論以獲取背景說明


我在這里看到了一些帖子和教程,用於檢查控件是否重疊,但是在動畫過程中檢查這個的最佳方法是什么?

我正在制作一個模擬軟件,其中涉及沿路徑設置一些 UIElements 動畫。 目前我有 20 個項目遵循這條路徑,它工作正常。

為此,我只創建了一個 20 的循環,在循環內,我正在創建 UIElement、故事板等,然后開始。 我等待大約 100 毫秒然后重復。 這在元素之間提供了很好的間隙。

無論如何,上述工作應有盡有。 現在下一點。 在 sim 的任何一點,UIElement 都可以停在它所在的位置。 現在,當發生這種情況時,我希望其他 UIElements 繼續運行,直到它們碰到停止的元素,並且它們 1 比 1 堆疊在它后面。

所以知道如何檢查重疊/交叉/碰撞,我如何在元素動畫期間檢查。

碰撞檢測本質上需要一個不斷檢查的計時器。 因為 WPF 中沒有碰撞事件。

您可以使用rect1.IntersectsWith(rect2)檢查兩個Rect對象的碰撞

取自這里

您可以使用以下方法找到元素相對於其父元素的Rect

public static Rect BoundsRelativeTo(this FrameworkElement element,
                                         Visual relativeTo)
{
  return
    element.TransformToVisual(relativeTo)
           .TransformBounds(LayoutInformation.GetLayoutSlot(element));
}

取自這里

問題是一次有多少元素被放入計時器的瓶頸中,如果碰撞檢測總是涉及一個停止的元素,那么該元素負責碰撞檢測。 否則,您將需要檢查 n^2 次碰撞(這很糟糕)。 您可以通過盡可能減少比較次數來提高此瓶頸的效率。 例如,由於對象沿公共路徑移動,因此您只能將停止的元素與其前一個元素進行比較。 您可以確保元素的排序集合來實現這一點。

由於所有元素都遵循一條公共路徑(一次發生一次碰撞):

  • 當第一個元素停止時啟動計時器。 並將其設置為參考元素
  • 將所有必需元素與參考元素進行比較
    • 當碰撞元素發生碰撞時改變參考元素

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM