Wie kann ich mehrere PictureBoxes kollidieren lassen (intersects with), ohne dabei eine Schleife nutzen zu müssen?

... komplette Frage anzeigen

1 Antwort

Einfache Antwort: gar nicht. An einer Stelle muss eine Schleife genutzt werden. Ob diese jetzt von dir kommt oder von einem Framework sei erstmal dahingestellt.

Als erstes solltest du, wie bereits erwähnt, abbrechen wenn etwas gefunden wurde:

if(gegner.Any(g => g.Bounds.Intersect(spieler.Bounds)))
MessageBox.Show("Tot");

Damit hast du die Schleife durch eine Linq-Anweisung ersetzt. Damit ist in deinem Code keine Schleife mehr. Die Realisierung wird allerdings per Enumerator und Schleifen gemacht.

Als nächstes könntest du das in eine PLinq-Anweisung umbauen:

if(gegner.AsParallel().Any(g => g.Bounds.Intersect(spieler.Bounds)))
MessageBox.Show("Tot");

Den Performancegewinn (falls es einen gibt) solltest du messen und testen. Wie angedeutet kann es sein, dass es keinen oder nur einen kleinen gibt.

Ansonsten kannst du versuchen die Liste möglichst klein zu halten. Du könntest z.B. nur die Gegner in der Liste halten, die im sichtbaren Bereich sind oder im gleichen "Raum" wie der Spieler. Das kommt dann aber etwas auf das Spiel an sich an.

Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von Nuke1818
01.09.2015, 20:21

Super kompetente Antwort! Du hast mir sehr geholfen!

0

Was möchtest Du wissen?