2016-03-31 9 views
1

Ich habe ein Spiel gemacht, bei dem der Spieler ein Quadrat kontrolliert, wenn es auf eine Wand trifft, sollte es sterben. Der Square ist eine Picture Box und die Wände sind ebenfalls Bildboxen. Sie können mit den Tasten W, A, S und D bewegen Ich dachte an etwas ähnliches zu tun:Erkennen, wenn eine Picture Box ein anderes Steuerelement berührt

if(Square.Top == Square.Top + Square.Height) 

und dann das Spiel neu starten. Gibt es einen besseren Weg es zu tun? Anstatt viele IFs zu haben? Wann immer eine Kontrolle eine andere berührt, um etwas zu tun?

Vielen Dank!

+0

tatsächlich, 'Square.Top == Wall.Top' zeigt nicht an, dass sie berühren, es sei denn, die Wand ist über dem Quadrat. Wenn sich die Wand rechts oder links vom Quadrat befindet, berühren sie sich nicht, auch wenn die Oberseite gleich ist. –

+0

Es war nur ein Beispiel, lassen Sie mich mich korrigieren Square.Top == Wall.Square.Top + Square.Height –

+0

Kollisionserkennung wird weitgehend im Internet gebloggt. Eine schnelle Suche gab mir diesen Artikel: https://developer.mozilla.org/en-US/docs/Games/Techniques/2D_collision_detection aber wirklich, es gibt Tonnen von Blog-Posts zu diesem Thema. –

Antwort

1

Ja, Sie erhalten das Rechteck des Steuerelements von Control.Bounds, und verwenden Sie dann IntersectsWith mit einem anderen Rechteck.

if(Square.Bounds.IntersectsWith(Wall.Bounds)) 
{ 
    // ... 
} 

Denken Sie daran, dass es nicht auslösen, wenn Ihr Platz eine Wand berührt, nur dann, wenn es auf es beginnt zu gehen, aber ich nehme an, das ist, was Sie wollen.

+0

Es hat funktioniert, danke Gediminas! –

Verwandte Themen