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

Schorsch

Supermoderator

  • »Schorsch« ist der Autor dieses Themas

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

11

05.02.2013, 19:02

Mit den 100% meinte ich eher 100% korrekt und nicht den Fortschritt in %. Mir geht es im Prinzip einfach darum, welcher Fahrer nun vorne liegt, welcher auf Platz 2, welcher auf Platz 3 und so weiter. Abstände in Pixeln habe ich auch nicht, da es sich um ein 3 dimensionales Spiel handelt. Und hinzu kommt, dass die Spiellogik unabhängig von der Auflösung ist. Statt Pixeln meintest du wohl allgemein eine Einheit. Das Problem bleibt aber immer noch.
Die Sache mit den Splines ist natürlich so ein nettes Feature. Aber wie du schon selbst schreibst, ist es mit einem Implementierungsaufwand verbunden. Selbst wenn die Implementierung bzw Integration von Splines in Unity einfach zu lösen wäre, würde ich dadurch die Abstandsrechnung erschweren. Weiterhin schreibst du ja selbst, dass es nicht ganz einfach sein wird mit einem Spline den Streckenverlauf nachzubilden. Von daher glaube ich dass eine einfache Punktliste als Annäherung reichen wird. Dabei könnte ich den Abstand über Punkt, Gerade berechnen. Da der Streckenverlauf keine extremen Steigungen hat sollte es ok sein, das Problem von oben zweidimensional zu betrachten.
Das Problem sollte dann recht einfach zu lösen sein. Die Idee mit dem Spline gefällt mir zwar ganz gut, ich sehe darin nur keinen Vorteil im Gegensatz zu einer Punktliste, bzw erschwere mir das Problem nur.
„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.“

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

12

05.02.2013, 19:56

Nachdem ich nun ein wenig drüber nachgedacht hab, würde ich mal vermuten, dass es nicht sinnvoll ist, dieses Problem von einem rein geometrischen Standpunkt aus anzugehen, weil eine rein geometrische Lösung, falls überhaupt vorhanden, extrem kompliziert sein dürfte. So lange man es nur mit konvexen Strecken zu tun hat, könnte man die Positionen der einzelnen Rennwagen z.B. auf einen Kreis projizieren. Aber rein konvexe Strecken sind vermutlich zu uninteressant und spätestens die Spline Variante wohl sehr kompliziert. Und zwar nicht, weil es so schwer sein wird, einen passenden Spline zu platzieren, sondern weil die Lösung es erfordern wird, dass Punkte auf diesen Spline projiziert werden, was vermutlich selbst für simpelste Splines schon nichtmehr analytisch lösbar sein dürfte. Und selbst wenn man dieses Problem gelöst bekommt, ist immer noch mit lokalen Ungenauigkeiten zu rechnen.

Aber überlegen wir doch nochmal, was wir rein prinzipiell erreichen wollen. Die Platzierung der einzelnen Fahrer ist doch eigentlich keine räumliche, sondern eine zeitliche Ordnung. Aufs Wesentliche Reduziert, ist so ein Rennen doch nichts anderes als das Abfahren von Checkpoints in einer vorgegebenen Reihenfolge. Bei einer geschlossenen Rennstrecke werden eben die selben Checkpoints mehrfach abgefahren, das Geheimnis ist einfach, dass die Checkpoints in der richtigen Reihenfolge passiert werden müssen, d.h. jeder Checkpoint hat einen designierten Nachfolger. Genau so wirds ja auch im richtigen Motorsport gemacht, Stichwort "Zwischenzeit": http://www.tagheuer-timing.com/en/circui…essional-timing. Nachdem die sich dort wohl schon wesentlich länger mit diesem Problem beschäftigt haben, geh ich mal davon aus, dass dies so ziemlich die beste bekannte Lösung sein dürfte... ;)

Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von »dot« (05.02.2013, 20:05)


Schorsch

Supermoderator

  • »Schorsch« ist der Autor dieses Themas

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

13

06.02.2013, 09:53

Das ist natürlich richtig und die Idee beim richtigen Motorsport zu gucken ist eigentlich gar nicht schlecht. Jedoch möchte ich ganz gerne eine kontinuierliche Platzierung der Fahrer haben. Das könnte ich nur über sehr viele Checkpoints erreichen. Aber ich finde die Idee hier die Zeit zu nehmen gar nicht schlecht. Für den Fall, dass sich mehrere Fahrer zwischen den selben Checkpoints befinden kann ich über den Pfad dazwischen den Fortschritt bestimmen. Das wird dann nur in seltenen Fällen passieren müssen. So ist es recht einfach und genau.
„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.“

Fred

Supermoderator

Beiträge: 2 121

Beruf: Softwareentwickler

  • Private Nachricht senden

14

06.02.2013, 12:09

Na ja du wirst in jedem Fall mehr Checkpoints benötigen als beim richtigen Motorsport. Ich weiß nicht genau, wie deine KI implementiert ist bzw. wie du sie implementieren willst, aber das einfachste wäre, denke ich, sie schlichtweg verschiedene unsichtbare Checkpoints anfahren zu lassen(die auf der Ideallinie in kurzen Abständen, in Kurven mehr als auf Geraden verteilt sind). Und genau dann hättest du ja viele Checkpoints, an denen du eine recht kontinuierliche Zeitnehmung bekommst.
Statt wirklicher "points" würde ich glaube ich aber auf "lines" zurückgreifen. Eine solche Checkline geht senkrecht zur Ideallinie durch den Checkpoint auf der Ideallinie. So hast du dann die Möglichkeit, dass die Fahrer auch abseits der Strecke fahren können und nicht wieder zurück fahren müssen, um einen Checkpoint auf der Strecke durchfahren müssen. Natürlich sollten die Linien trotzdem in ihrer Länge beschränkt werden, da es sonst wirde möglich wäre abzukürzen.

Schorsch

Supermoderator

  • »Schorsch« ist der Autor dieses Themas

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

15

06.02.2013, 12:47

KI ist bis jetzt eigentlich kein Thema. Bei dem Spiel geht es um den Multiplayeraspekt und der macht eigentlich nur Spaß wenn man mit einem Freund spielt. Vielleicht kennt ja Jemand noch Chocobo Racing. Ist eine Art Mario Cart. Das dient uns als Vorbild. Ich werde einfach testen inwiefern die Checkpoints allein ausreichend sind.
„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.“

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

16

06.02.2013, 12:54

Ich würde die Strecke über eine Reihe von Liniensegmenten annähern.
Dann bestimmst du für jeden Fahrer den nächsten Punkt auf einer der Linien. Das kann man naiv machen, indem man jedes Liniensegment durchgeht, aber es bieten sich auch viele Ansätze zur Beschleunigung mittels räumlicher Datenstrukturen und Vorwissen.
Den ermittelten Punkt bzw. Streckenabschnitt kannst du dann in eine Zahl zwischen 0 und 1 verwandeln, wobei 0 = Start und 0.99999... = ganz kurz vor dem Ziel. Alternativ auch in Meter.
Nun hast du für jeden Fahrer einen solchen Wert und kannst sie somit direkt vergleichen. Nur nicht vergessen, dass man auch überrundet werden kann, also die Anzahl der vollständigen Runden noch draufrechnen.

Die Erkennung, ob jemand einfach nur Kreise um die Ziellinie dreht, geht dann auch recht einfach.
Man bekommt nur dann eine Runde gutgeschrieben, wenn man den Streckenabschnitt 1 (= Start/Ziel) "von unten kommend" überquert, d.h. wenn der Streckenabschnitt des Fahrers zuvor kleiner war. Somit ist Schummeln ausgeschlossen.

Schorsch

Supermoderator

  • »Schorsch« ist der Autor dieses Themas

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

17

06.02.2013, 13:06

Das wäre ja dann im Prinzip das was ich mit einem Pfad meinte. Habe das Problem noch mal mit einem Kollegen auseinander genommen und haben uns ein paar Problemsituationen etc überlegt. Dabei sind wir zu dem Punkt gekommen, dass das wohl die einfachste und sinnvollste Lösung darstellen sollte.

edit:
Das mit den Checkpoints funktioniert perfekt. War auch noch ziemlich einfach umzusetzen. Ich habe die Checkpoints durch Boxcollider dargestellt. diese werden so über die Strecke gezogen, dass man einen Collider passieren muss um weiter zu kommen. Abkürzungen etc wird es erst mal nicht geben, weshalb solche Fälle vernachlässigt werden können. Diese Collider brauche ich für ein paar andere Dinge, im Prinzip reichen hätten Punkte ausgereicht. Um die Spieler nun nach Platzierung zu sortieren, wird zuerst die Rundenzahl verglichen, wenn diese gleich ist, wird der aktuelle Streckenabschnitt vergleichen und wenn auch dieser gleich ist, dann wird der Fortschritt auf diesem Streckenabschnitt vergleichen. Das sieht in etwa wie folgt aus:
Fahrer1 (Runde 1), Fahrer2 (Runde 1) also bis hierhin gleich.
Fahrer1 befindet sich auf dem Streckenabschnitt Punkt_3 bis Punkt_4, Fahrer2 befindet sich auf dem selben Abschnitt also auch bis hier hin gleich.
Jetzt wird die Orthogonale zum Streckenabschnitt gebildet welche durch die Position von Fahrer1 führt. Diese Gerade wird mit dem Streckenabschnitt geschnitten und so ein Schnittpunkt ermittelt. Nun wird vom ersten Punkt der Strecke (Punkt_3) zu diesem Punkt der Abstand ermittelt. Dieser Abstand dient als letzter Vergleichswert. Das selbe wird für Fahrer2 gemacht. Der Fahrer mit höherem Wert ist vorne. Wenn sich der Streckenabschnitt oder die Rundenzahl unterscheidet kann natürlich schon vorher Schluss gemacht werden. Diese Lösung gefällt mir ganz gut. Sie liefert gute Ergebnisse und war recht simpel umzusetzen.

Vielen Dank für die vielen guten Hinweise. Wenn hier kein Diskussionsbedarf mehr besteht kann der Thread gerne geschlossen werden.
„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.“

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Schorsch« (06.02.2013, 17:46)


Werbeanzeige