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

FSA

Community-Fossil

  • »FSA« ist der Autor dieses Themas
  • Private Nachricht senden

11

06.07.2012, 14:42

@David:

Zitat von »"David Scherfegen"«

Daraus werde ich nicht schlau.
Angenommen ich spiele ein Spiel und will den Spielstand abspeichern. Dann wird in dem Moment ein separates Programm gestartet, das dies tut?
Verbindet sich das dann via Netzwerk mit der Engine, um an die Daten zu kommen, oder wie? Ich sehe den Sinn da nicht.

Wow was ein kompliziertes Verfahren 8| Nein. Diese Tool ist dazu da, um ein vorhandenes mit der Engine geschriebenes Savegame auszulesen und zu verändern(für Entwicklungszwecke)

Zitat von »"David Scherfgen"«

Brav
Wuff,Wuff :thumbsup:
Ok das mit dem GUI Designer leuchtet ein. Kann ich mal machen.

@BlueCobold: Ich/Wir entwickel parallel ein Spiel ;)

@Thoran: Ja das ist eine gute Idee. Doch daran hindert mich wxWidgets... Ich wüsste nicht wie ich das grafisch darstellen soll. Kann ich mal sehen wie es bei dir ist?

Zitat

Der RCCSWU (RandomCamelCaseSomtimesWithUndersquare) Stil bricht auch mal mit den veraltet strukturierten Denkmustern und erlaubt dem Entwickler seine Kreativität zu entfalten.

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

12

06.07.2012, 14:55

Zum Thema Savegames:
Was unterstützt deine Engine denn da so? Wie steht's mit Serialisierung von Objektgraphen? Z.B. im Spieler-Objekt wird eine Referenz auf ein anderes Objekt gespeichert, dieses wiederum referenziert 100 weitere Objekte. Muss man das alles selbst serialisieren, oder macht das die Engine? Ich frage, weil ich momentan tief in diesem Thema drin bin, da ich sowas für Unity mache, um das sehr begrenzte System dort zu erweitern.

FSA

Community-Fossil

  • »FSA« ist der Autor dieses Themas
  • Private Nachricht senden

13

06.07.2012, 15:27

So komplex ist das SaveGame nicht. Aber man übergibt der Engine das zu speichernde Objekt als Referenz(was auch andere Referenzen ethalten darf) und sie speichert das mit Gettern alles in die Datei rein. Wenn eine Referenz eine Refrenz ethält wird das so gelöst:

C-/C++-Quelltext

1
Referenz1->GetGeferenz2()->GetValue();

Aber so kompex wie du das machst hatte ich das nicht vor ;)

Zitat

Der RCCSWU (RandomCamelCaseSomtimesWithUndersquare) Stil bricht auch mal mit den veraltet strukturierten Denkmustern und erlaubt dem Entwickler seine Kreativität zu entfalten.

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

14

06.07.2012, 15:37

Das finde ich nicht gut.
Einfaches Beispiel: in meiner Gegner-Einheit ist eine Referenz auf das aktuelle "Ziel" des Gegners, kann z.B. der Spieler sein.
Dann muss diese Referenz irgendwie als Objekt-ID gespeichert werden und nicht das referenzierte Objekt selbst. Das erfordert wiederum eine Abhängigkeits-Auflösung: welches Objekt verweist auf welches Objekt? Damit kann man dann eine Reihenfolge ermitteln, in der die Objekte serialisiert/deserialisiert werden.

Ich denke du hast da zwei Möglichkeiten:
1. Mach es in der Engine, dann aber richtig (s.o.).
2. Überlass es komplett dem Spiel, und du bist fein raus ;)

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

15

06.07.2012, 15:48

Das Speichern der Spiel-relevanten Objekte überlasse ich z.B. dem jeweiligen Spiel, aber definierte Verhaltensmuster, Animationen, Shader, Grafiken, Sounds, etc. sind bei mir alle gekapselt serialisier- und deserialisierbar, sowie Caching und Cloning solcher Objekte. Das selbe Konzept, was bei den Objekten gemeinsam verwendet wird, kann aber jederzeit auf die eigenen Typen angewendet werden, sodass am Ende alles identisch verwaltet aussieht. Referenzen sind bei mir nur über IDs und Zustände sind zum Glück bei meinen Spielen nicht relevant. ;) Die IDs müssen allerdings in einer Bibliothek gepublished werden, damit die richtigen Files geladen werden können. Davon hat natürlich jeder Scope, bzw. jedes Plugin seine eigene, woraus sich aus den darüber liegenden Schichten dann Bäume bilden können. Durchaus praktisch, geht sicher auch eleganter.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

FSA

Community-Fossil

  • »FSA« ist der Autor dieses Themas
  • Private Nachricht senden

16

06.07.2012, 15:48

@David
Damit hast du recht. Aber wieso geht das nicht? Wenn die EnemyKlasse eine Playerreferenz hat kann man ja einfach:

Quellcode

1
Enemy->GetTargetReference()->GetSomething();

Targetreferenz sollte dann vom Typ void sein, dass sie alle möglichen Referenzen nehmen kann, oder irre ich mich da?

Zitat

Der RCCSWU (RandomCamelCaseSomtimesWithUndersquare) Stil bricht auch mal mit den veraltet strukturierten Denkmustern und erlaubt dem Entwickler seine Kreativität zu entfalten.

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

17

06.07.2012, 17:39

@FSA:
Hast du schonmal einen Pointer in eine Datei geschrieben?

FSA

Community-Fossil

  • »FSA« ist der Autor dieses Themas
  • Private Nachricht senden

18

06.07.2012, 17:48

Ja^^ Aber da ist doch kein Pointer! GetSomething() Liefert eine Variable zurück. So meinte ich das doch ;)

Zitat

Der RCCSWU (RandomCamelCaseSomtimesWithUndersquare) Stil bricht auch mal mit den veraltet strukturierten Denkmustern und erlaubt dem Entwickler seine Kreativität zu entfalten.

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

19

06.07.2012, 18:34

Und was soll das für eine Variable sein?
Ich glaube du hast mein Argument nicht verstanden.
Also nochmal mit einem anderen Beispiel:

In deinem Spiel hast du sowas:

C-/C++-Quelltext

1
2
3
4
5
class Enemy
{
private:
    Enemy* wingman; // anderer Gegner, mit dem dieser hier kooperiert
};


Wie speicherst du sowas?
So wie ich es verstanden habe, speicherst du keine Referenz, sondern das Objekt selbst. Der andere Gegner hat aber wiederum einen "wingman", dann würdest du nie fertig mit Speichern und hättest nach kurzer Zeit einen Stack-Überlauf. Außerdem würde ein und dasselbe Objekt mehrfach gespeichert und beim Laden würden (in diesem Fall unendlich viele) Kopien davon erzeugt, der ursprüngliche Zustand wäre verloren.

FSA

Community-Fossil

  • »FSA« ist der Autor dieses Themas
  • Private Nachricht senden

20

06.07.2012, 19:05

So habe ich auch noch nicht drüber nachgedacht. Wie Speicherst du das?

Zitat

Der RCCSWU (RandomCamelCaseSomtimesWithUndersquare) Stil bricht auch mal mit den veraltet strukturierten Denkmustern und erlaubt dem Entwickler seine Kreativität zu entfalten.

Werbeanzeige