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

Lars

Frischling

  • »Lars« ist der Autor dieses Themas

Beiträge: 14

Wohnort: Hamburg

Beruf: Musiker / Fotograf

  • Private Nachricht senden

1

01.05.2012, 21:41

Suche Tipps & Tricks für GameLoop und Bewegung von Game-Einheiten

Hallo,

für mein UBootSimulator-Projekt möchte ich nun endlich mit der Programmierung der GameLoop starten. Da ich mit der Spieleprogrammierung noch nicht so vertraut bin, bin ich für Tipps und Tutorials immer dankbar. Mir ist natürlich generell klar was die GameLoop macht, dennoch habe ich hier mal ein paar Fragen:


  • Ich möchte gerne eine Zeitraffer mit einbauen, um nicht immer in nahezu Echtzeit testen zu müssen

  • Starten möchte ich mit den 'Bewegungen' der Spiele-Einheiten
Bis jetzt ist meine GameLoop nur die 'leere' Loop. In Etwa wie folgt:

  1. Laden der Spieledaten wie Karte und Spiele-Einheiten (Schiffe, Helis, Flugzeuge...) - Die Karte ist etwa 600.000x600.000 Meter.
  2. Positionierung der Einheiten
  3. LOOP
Zur Info: Meine Loop muss KEINE Grafikausgaben machen. Sie berechnet ausschließlich den 'Spielezustand' und liefert die Daten dann an
die anderen PC's, auf denen die anderen Routienen ('Stationen') laufen. Auch gibt es keine 'zeitkritischen Aufgaben'. Wenn in etwa ein Mal pro Sekunde die Einheiten upgedatet werden reicht das.

Mir ist generell schon klar, wie ich z.B. ein Schiff von Pos 1 zu Pos 2 bewege. Aber die Schiffe (Einheiten) sollen auch eine gewisse Taktik bekommen. So z.B. 'Suche im Umkreis von 10 sm nach fremdem U-Booten', wenn Du ein feindliches entdeckst, Angriff, Verfolgung, e.t.c..

Da meine Mathe-Kenntnisse auf Realschule beruhen, habe ich gar nicht erst eine 'Art KI' in Erwähgung gezogen. Habe darüber mal ein Tut gelesen und mir ist schwindelig geworden... :fie: Ich würde das eher gerne hardcoden oder über Scripts steuern.

Vielleicht habt Ihr ja Tipps und/oder Links zu Tutorials was dieses Thema betrifft. Vielleicht kann ich auch auf eine 2D und/oder Physik-Engine zurückgreifen, die mir einige Probleme etwas erleichtert? Ich bin ja sicher nicht der erste, der eine Spieleeinheit in einer 'Box' (Rectangle) fahren lassen will.. ;)

Ich bin jedenfalls für sämtliche Hilfen dankbar ...

Gruß,
Lars

TrommlBomml

Community-Fossil

Beiträge: 2 117

Wohnort: Berlin

Beruf: Software-Entwickler

  • Private Nachricht senden

2

02.05.2012, 07:49

Das ist auch nicht gerade das einfachste Thema. Ich bin auch kein Experte in KI, aber wenn du du dort gute Ergebnisse erzielen willst, sind zwei Stichworte denke ich Hilfreich: Probleme in Teilprobleme zerlegen und Zustandsautomaten:

1. Probleme in Teilprobleme zerlegen

Das macht so ziemlich jeder, der ein komplexes Problem hat. Dein Projekt ist in Bezug auf die Simulationslogik nicht anders. Du musst versuchen die Aufgaben, die deine Simulation hat, in möglichst einfache Teilschritte zerlegen. Aber auch nur soweit, dass du sie auf oberster Ebene überschauen kannst. Dann verlierst du nicht den Überblick.

2. Zustandsautomaten

Gebe deinen Spielobjekten Zustände. Jeder Zustand hat eine Ausführungslogik und Übergangsbedingungen zu anderen Zuständen. Du hast deine Zustände bereits genannt:

Zitat

'Suche im Umkreis von 10 sm nach fremdem U-Booten', wenn Du ein feindliches entdeckst, Angriff, Verfolgung, e.t.c..
Dabei ist meine Erfahrung: weniger ist mehr. Zum Beispiel könnten Zustände Erkunden, Verfolgung, Angriff und Rückzug sein. Bei den Zuständsübergangen kannst du ja erstmal sehr simple Annahmen treffen. Befindet sich zum Beispiel ein U-Boot im Zustand Erkunden, dann wechsle nur dann in Angriff, wenn ein Gegner in der Nähe ist ( vllt 5km umkreis). Parametrisieren kannst du später machen, z.b. in Dateien auslagern und kannst dann wunderbar testen! Wenn die einfachen fälle funktionen, verfeinere deine Logik und Übergangsbedingunden.

Zum Zeitraffer:

Deine Simulation sollte die Zeit, die für einen Simulationsschritt benötigt wird, messen. Dies könnte für dich dein Leitwert zur Simulationsgeschwindigkeit == 1 sein. Bzgl. Physik wäre sogar eine möglichst konstante Simulationsgrundgeschwindigkeit sehr praktisch, also dass du mit festen Zeitintervallen einen Simulationsschritt berechnest, z.b. 20 mal die Sekunde.
Wenn du dann schneller Simulieren möchtest, dann multiplizierst du einfach deine Vergangene Zeit - egal ob Konstant oder Variabel - mit einem Multiplikator. Wichtig ist, das alle deine Simulationsbewegungen und eventuell Entscheidungsreaktionen in Abhängigkeit der Simulationsgeschwindigkeit * Zeitraffer durchgeführt werden. Hier ein bisschen pseudo-C++:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
float lapse = 1.0f; //dein zeitraffer-multiplikator 
while (!end) 
{ 
float elapsed = myTimer.GetElapsedTime() * lapse; 
for(int i = 0; i < ships.size(); ++i) 
{ 
ships[i].UpdateLogic(elapsed); 
} 
//.. Andere Updatelogik 
//deine Logik zu anderen PCs senden 
CommitSnapshotOfLogic(); 
}

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »TrommlBomml« (02.05.2012, 07:56)


Lars

Frischling

  • »Lars« ist der Autor dieses Themas

Beiträge: 14

Wohnort: Hamburg

Beruf: Musiker / Fotograf

  • Private Nachricht senden

3

02.05.2012, 19:37

Danke!

Das hat mir schon mal weitergeholfen! Werde noch versuchen, ein bisschen mehr Lesestoff darüber zu finden...

Gruß,
Lars

TrommlBomml

Community-Fossil

Beiträge: 2 117

Wohnort: Berlin

Beruf: Software-Entwickler

  • Private Nachricht senden

4

03.05.2012, 07:34

Was vielleicht auch indirekt helfen könnte: bloggen. Einerseits durch die Tatsache, dass du deine Ideen und Arbeit verbal niederschreibst bekommt man nochmal im Nachhinein einen guten Eindruck über das, was man getan hat. Oftmals stellt man eine Frage oder möchte einen Lösungsansatz vorstellen und stellt beim Überlegten schreiben schon Schwächen fest oder wo es Erweiterungsmöglichkeiten gibt. Zusätzlich haben andere Interessenten die Möglichkeit, deine Arbeit nachzuverfolgen und Dir gegebenenfalls auch Tipps, Kritik oder Lob zu hinterlassen. Setzt natürlich voraus, dass du genügend Leser hast ;)

Lars

Frischling

  • »Lars« ist der Autor dieses Themas

Beiträge: 14

Wohnort: Hamburg

Beruf: Musiker / Fotograf

  • Private Nachricht senden

5

03.05.2012, 12:06

Ja, das mit den Bloggen und den Lesern ist genau das Problem... Es finden zwar viele Leute mein Projekt ganz interessant, halten mich aber für ziemlich verrückt ;) Auf UBootSimulator.de habe ich versucht einen Blog einzurichten. Die Seite soll jetzt noch ins englische übersetzt werden und dann kann ich das im größten Marine-Sim-Forum posten (www.subsim.com). Dann werden wohl auch mehr Leute sich das mal näher anschauen...hoffe ich ;)

Werbeanzeige