2 Stimmen

Feststellen, ob zwei Steuerelemente auf einer Leinwand kollidieren

Mein Windows Store-Projekt kann Steuerelemente auf einem Canvas bewegen, indem ManipulationDelta verwendet wird. Ich möchte 'anhängbare' Steuerelemente erstellen, bei denen beim Ziehen eines Steuerelements auf ein anderes Steuerelement auf dem Canvas die auf einem von ihnen angewandten Rotationsumwandlungen auch auf das andere angewendet werden.

Der einfachste Kollisionserkennung besteht darin zu überprüfen, ob sich die Rechtecke der beiden Steuerelemente überschneiden, aber da sie um jeden Winkel gedreht werden können, ist dies nicht möglich.

Wie kann das gemacht werden?

2voto

virtyaluk Punkte 145

Sie können die Methode Intersect der Klasse Windows.Foundation.Rect verwenden, um festzustellen, ob Elemente gemeinsame Punkte haben.

Verwenden Sie mein Beispiel:

private Rect DetectCollisions(FrameworkElement rect1, FrameworkElement rect2)
{
   var r1 = new Rect(Canvas.GetLeft(rect1), Canvas.GetTop(rect1), rect1.ActualWidth, rect1.ActualHeight);
   var r2 = new Rect(Canvas.GetLeft(rect2), Canvas.GetTop(rect2), rect2.ActualWidth, rect2.ActualHeight);
   r1.Intersect(r2);
   return r1;
}

In diesem Beispiel wurden 2 Rect-Objekte aus 2 eingehenden FrameworkElement-Objekten erstellt. Dann verwenden wir die Methode Intersect des ersten Rect, um festzustellen, ob die Rechtecke gemeinsame Punkte haben. Wenn ja, speichert die Methode das neue Schnittpunkt-Rect in der Variablen r1Rect.Empty zurück.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X