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

1

29.08.2006, 21:11

Rennspiel - wer ist vorne?

Hi,

ich würde gern wissen, wie ich meinem Programm, in dem zwei Figuren immer um einen Wald (Mitte des Bildschirms) wettlaufen, beibringe, herauszufinden, wer gerade vorne liegt. Eigentlich ein Problem, wie es in jedem Rennspiel vorkommen müsste, ich hab aber leider keine Lösung im Netz finden können.
Checkpoints wären mir eingefallen, aber wirklich befriedigend ist das nicht. Man sollte immer sehen können, wer vorne ist, in anderen Spielen klappt das doch auch.

Kann mir jemand einen Tipp oder ein paar gute Links geben?
Danke :)
Harvest

2

29.08.2006, 21:17

Re: Rennspiel - wer ist vorne?

.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »FOGX« (15.09.2010, 16:27)


big_muff

Alter Hase

Beiträge: 460

Wohnort: Schweiz

Beruf: Informatikstudent (4. Semester)

  • Private Nachricht senden

3

29.08.2006, 22:05

Also dein Problem ist relativ einfach zu lösen:
Bau einen Rundenzähler für alle Spieler ein, den du nach jedem Kreisdurchlauf erhöhst. Der schnellste Spieler ist der mit den meisten Runden. Haben zwei Spieler die selbe Rundenanzahl (was ja eigentlich meistens der Fall sein wird) berechnest du mittels der x- und y-Position des Spielers den Winkel, indem der Spieler gerade um den Kreis steht. Je grösser (oder je kleiner, je nach Laufrichtung) dieser Winkel ist, desto weiter vorne ist der Spieler.

Allgemein in einem Rennspiel würde ich das so lösen (keine Ahnung wie das professionell gemacht wird):
In der Level-Datei der Strecke würde ich eine Reihe von Punkten mit einer festen Reihenfolge definieren (so etwa jeden Meter). Dann berechnest du welchem Punkt des Auto am nächsten liegt und da jeder Punkt eine gewisse Rangordnung hat ist das Auto, dass bei einem Punkt mit einem höheren Index liegt weiter vorne. Haben zwei Autos den selben Punkt, so berechnest du, welches Auto näher an dem Punkt liegt. Dies sollte recht gute Ergebnisse liefern. Nur wenn die Autos ziemlich genau nebeneinander fahren gibt es so kleine Unstimmigkeiten. Das liese sich aber lösen, wenn man statt des Abstandes zum nächsten Punkt das Lot auf die Linie zwischen den zwei nächsten Punkten werfen würde und die Autos anhand dieses Punktes vergleichen würde. So wäre das extrem genau...
Nur Idioten halten Ordnung, ein Genie beherrscht das Chaos.[size=7]

[/size]HardFate - Ein Start, Ein Ziel, Viele Wege[size=7]

[/size]Ein Mitglied der VEGeiCoUndGraSonMaWiGeS Bewegung.

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

4

29.08.2006, 22:12

Probleme, über die man sich auf jeden Fall noch Gedanken machen muss:
- Was passiert, wenn ein Checkpoint übersprungen wird?
- Was passiert, wenn man rückwärts läuft?

5

01.09.2006, 04:42

@big_muff:
Vielen Dank für die Super-Idee. Die Winkelmethode ist zusammen mit dem Rundenzähler genau richtig für mein Minigame. Auch die Idee mit den Streckencheckpoints klingt gut. Die Probleme, die Daniel angesprochen hat, treffen bei mir nicht ein, das zweite wird durch die Methoden erledigt, Checkpoints außer der Ziellinie gibt es nicht und die kann nicht übersprungen werden.

Aber die Fragen sind für ein richtiges Rennspiel interessant. Hat jemand von euch da mal Sourcecodes gelesen? Ich bin am überlegen, mir mal aus dem Debian Gamestree ein OpenSource Rennspiel zu nehmen und versuchen, herauszufinden, wie die das machen. Allerdings bin ich erst seit einem Monat am Programmieren und fremder Code ist *hust* etwas unbequem..

J.M.K.

Alter Hase

Beiträge: 500

Wohnort: BW Karlsruhe Ittersbach

Beruf: Schüler

  • Private Nachricht senden

6

01.09.2006, 08:33

Hmm ich denke mal um irgendwelche Vorschläge zu machen sollte man mehr über deinen Wissensstand wissen bzw. in was du überhaupt programmierst.

Übrigends heißt der nicht Daniel sondern David. ;)
Vegetarier essen meinem Essen das Essen weg.

babelfish

Alter Hase

Beiträge: 1 222

Wohnort: Schweiz

Beruf: Informatiker

  • Private Nachricht senden

7

01.09.2006, 15:57

Die alten Spiele haben das IMHO mit Checkpoints gemacht, mein Rang stieg nämlich fast nie sofort nach der überholung...
Aber es sollte doch noch einen anderen Weg geben, für dein mini Spiel wäre das mit dem Winkel ja schön und gut, aber ich frage mich auch wie es die Profis machen, immerhin gibt es da ja nicht immer nur einen Weg, und wenn man eine Strasse hätte aber stattdessen den Rasen zum Fahren nehmen würde funktioniert die Positionsabfrage auch...

Natürlich könnte man das ganze auch mit Checkpoints vollstopfen,
also so dass es viele CheckPoints mit den gleichen Werten hätte, aber naja, arme Rechenzeit. :?

Paul_C.

Frischling

Beiträge: 81

Wohnort: Duisburg

  • Private Nachricht senden

8

01.09.2006, 16:51

Vielleicht könnte man auch die Strecke in Gebiete aufteilen. Ein Kreis würde ich in 4 Teile unterteilen. Diese Teile gehören dann als Attribut zum Spieler. Wenn dann zwei Spieler in derselben Teilstrecke unterwegssind, dann nimmt man den vordersten Punkt (oder Mittelpunkt) beider Autos und sieht sich die Steigung bzw. das Gefälle an. Steigt die Grade von Spieler 2 zu Spieler 1, so ist 1 vorne, sonst 2.

Chase

Alter Hase

Beiträge: 753

Wohnort: Nagaoka / Darmstadt / Düsseldorf

Beruf: fauler Studi

  • Private Nachricht senden

9

01.09.2006, 19:02

Je nach Speichermodell fuer die Strecken kann man sich ein manuelles Setzen von Checkpoints auch sparen: Eine Rennstrecke wird ja groesstenteils durch Begrenzungen an den Fahrbahnraendern definiert. Jetzt nimmt man sich einfach den inneren oder aeusseren Fahrbahnrand heraus und bildet das Lot zum Spieler. Dann reicht es wahrscheinlich schon alle geraden Abschnitte dieser Begrenzung durchzunummerieren, um zu berechnen wie weit eine Runde fortgeschritten ist.
(ist irgendwie schwer in Worte zu fassen :))
"Have you tried turning it off and on again?"

big_muff

Alter Hase

Beiträge: 460

Wohnort: Schweiz

Beruf: Informatikstudent (4. Semester)

  • Private Nachricht senden

10

01.09.2006, 22:53

Zitat von »"Chase"«

Eine Rennstrecke wird ja groesstenteils durch Begrenzungen an den Fahrbahnraendern definiert.

Glaub ich eher nicht. So müsste die Strecke ja jedesmal generiert werden. Ich würde eher ein ganz normales Terrain nehmen und die Strecke durch unregelmässig verteilte (auf Geraden grosse Abstände, in Kurven kleine) nummerierte in der Mitte der Strecke liegende Punkte wie in meinem vorigen Post beschrieben definieren. Falls die Strecke nicht natürlich begrenzt ist (Wälder, Steine...) würde ich einen maximalen Abstand definieren, bei dessen Überschreitung der Spieler auf die Strecke zurückgesetzt wird.

Zitat von »"babelfish"«

Natürlich könnte man das ganze auch mit Checkpoints vollstopfen,
also so dass es viele CheckPoints mit den gleichen Werten hätte, aber naja, arme Rechenzeit.

Wenn du natürlich den Abstand zu jedem Streckenpunkt ausrechnest ist das sicher langsam, aber schon durch kleine Optimierung ist sowas so schnell zu lösen, dass die Rechenzeit dafür nicht mehr ins Gewicht fällt...
Nur Idioten halten Ordnung, ein Genie beherrscht das Chaos.[size=7]

[/size]HardFate - Ein Start, Ein Ziel, Viele Wege[size=7]

[/size]Ein Mitglied der VEGeiCoUndGraSonMaWiGeS Bewegung.

Werbeanzeige