Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Sacaldur

Community-Fossil

Beiträge: 2 301

Wohnort: Berlin

Beruf: FIAE

  • Private Nachricht senden

11

28.05.2015, 14:26

Aber warum sollte man etwas verstehen, was man in der Praxis nicht verwenden sollte? Pixelperfekte Kollision wird bei höheren Auflösungen langsamer (da mehr Pixel betrachtet werden müssen), bei Animationen ändert sich das Verhalten von Kollisionen (da Objekte sich verformen können), Rotationen sorgen für Probleme, es lässt sich nicht auf den 3D-Bereich übertragen usw. Ich hatte schonmal ein Beispiel für ein J2ME (ja, das alte Java für Mobilgeräte) gesehen, bei dem pixelgenaue Kollision verwendet wurde, bei der der Spieler sehr leicht an allen möglichen Objekten hängen bleiben konnte, nur weil er nicht mehr zur Seite, sondern hoch laufen wollte. (Die Spielfigur war breiter als hoch, dadurch geriet der Arm in den Busch, die Wand, ...)
Weiterhin betrachtet ein Mensch die auf dem Bildschirm angezeigten Dinge nicht als Ansammlung von viereckigen Kästen, sondern versucht diese auf möglichst einfache Grundformen herunterzubrechen. Warum sollte sich ein Spiel dann anders verhalten?
Wie du dir vielleicht denken kannst, finde ich nicht, dass pixelgenaue Kollisionen sinnvoll investierte Zeit wäre.
Spieleentwickler in Berlin? (Thema in diesem Forum)
---
Es ist ja keine Schande etwas falsch zu machen, als Programmierer tu ich das täglich, [...].

12

28.05.2015, 14:52

Warum sich mit den alten Griechen beschäftigen, wenn die eh schon tot sind? ;)
Wenns interessant ist, ist es doch gut.

Sacaldur

Community-Fossil

Beiträge: 2 301

Wohnort: Berlin

Beruf: FIAE

  • Private Nachricht senden

13

28.05.2015, 15:22

Das Problem an diesem Vergleich ist: "die alten Griechen" ist extrem weit gefasst und umfasst unter anderem auch die Philosophen dieser Zeit, die sich mit grundlegenden Prinzipien beschäftigt haben, welche nicht an Gültigkeit verloren haben. Weiterhin war in dieser Zeit ein bestimmter Stil in der Kunst sehr verbreitet, und ich denke die Gebiete der Mathematik und Architektur sind ebenfalls davon betroffen.
Bei pixelgenauer Kollision bezweifle ich, dass das jemals eine sinnvolle Überlegung war.
Spieleentwickler in Berlin? (Thema in diesem Forum)
---
Es ist ja keine Schande etwas falsch zu machen, als Programmierer tu ich das täglich, [...].

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

14

28.05.2015, 17:18

Wenn du eine pixelgenaue Kollision schreibst dann ist wichtig was TGGC und David gesagt haben. Pixel können nicht rotiert sein und Texturefilterung darf nicht vorhanden sein. Am einfachsten ist es wenn du die einzelnen Sprites so renderst wie sie sind. Das heißt du darfst sie verschieben, nicht aber skalieren oder rotieren. Möchtest du ein Objekt rotieren so legst du dafür verschiedene Grafiken im voraus an. Möchtest du jetzt überprüfen ob zwei Sprites miteinander überlappen guckst du welche Pixel der beiden Grafiken im Spiel überlappen. Diese sich überlappenden Pixel gehst du durch und guckst ob an einem Punkt beide Pixel sichtbar, das heißt nicht transparent sind.
Das ist zumindest der einfachste Fall. Möchtest du Grafiken auch wirklich rotieren und skalieren können, so müsstest du für rotierte und/oder skalierte Grafiken die Zielgrafik bestimmen, das bedeutet die Grafik wie sie nach der transformation aussieht. Mit diesen Grafiken kannst du dann wie vorher auch wieder auf Überlappungen prüfen und danach die jeweiligen Pixel durchgehen.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

15

01.06.2015, 21:17

Aber warum sollte man etwas verstehen, was man in der Praxis nicht verwenden sollte?


Welche Kollision Art würdest du mir denn empfehlen? Für zum Beispiel rotierende Asteroide die auf ein Raumschiff zu fliegen.

Sacaldur

Community-Fossil

Beiträge: 2 301

Wohnort: Berlin

Beruf: FIAE

  • Private Nachricht senden

16

01.06.2015, 22:02

In einem anderen, ähnlichen Thema habe ich eine solche Antwort bereits gegeben:
Statt einer "pixelgenauen Prüfung" solltest du die Formen deiner Objekte lieber mit geometrischen Formen (Rechtecke und Kreise) annähern [...] und auf Überlappung dieser prüfen.

Also grob formuliert: genau das, was sonst jede Physik-Engine machen würde. (Geometrie und darauf basierende Berechnungen.)
Spieleentwickler in Berlin? (Thema in diesem Forum)
---
Es ist ja keine Schande etwas falsch zu machen, als Programmierer tu ich das täglich, [...].

17

01.06.2015, 22:15

Also z.B. das Raumschiff in mehrere Teile zerlegen, die Flügel in ein Rechteck + Dreieck usw...

und dann überprüfen ob einer dieser Formen ein Aseroid berühert?

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

18

01.06.2015, 22:30

Ja. Du musst das aber nicht selber überprüfen, das macht ja die Physik-Engine für dich.

Werbeanzeige