Gamestudio Links
Zorro Links
Newest Posts
loading historical data 1st time
by AndrewAMD. 04/14/23 12:54
Trade at bar open
by juanex. 04/13/23 19:43
Bug in Highpass2 filter
by rki. 04/13/23 09:54
Adding Limit Orders For IB
by scatters. 04/11/23 16:16
FisherN
by rki. 04/11/23 08:38
AUM Magazine
Latest Screens
SHADOW (2014)
DEAD TASTE
Tactics of World War I
Hecknex World
Who's Online Now
2 registered members (Quad, AndrewAMD), 1,007 guests, and 6 spiders.
Key: Admin, Global Mod, Mod
Newest Members
rki, FranzIII, indonesiae, The_Judge, storrealba
18919 Registered Users
Previous Thread
Next Thread
Print Thread
Rate Thread
game_save / load mit structs #386892
11/10/11 16:58
11/10/11 16:58
Joined: Aug 2008
Posts: 394
Germany
Benni003 Offline OP
Senior Member
Benni003  Offline OP
Senior Member

Joined: Aug 2008
Posts: 394
Germany
Guten Abend, ich habe derzeit ein Problem beim speichern/laden des Spiels.
Ich habe selbstdefinierte structs in meinem Spiel.
Nachdem mit sys_malloc() speicher reserviert wurde, wird add_struct() aufgerufen, um das Struct beim savevorgang zu berücksichtigen.
In den Structs habe ich pointer auf Entities und andere selbsterstellte Structs. Die Pointer werden beim Speichern in var variablen gespeichert und beim laden wieder in Pointer "convertiert". Wenn ich im spiel auf speichern klicke und später auf laden, funktioniert es. Wenn ich allerdings nach dem speichern die Engine verlasse und nach einem erneuten spielstart den alten Speicherstand lade, können die meisten Pointer nicht wiederhergestellt werden.
Hier der Aufbau des codes. (nur um es anschaulich zu machen)

Code:
ELEM* elem;

typedef struct LIST
{
	var a;
	
}LIST;

typedef struct ELEM
{
	
	LIST* list;
	var v_list;
	
	ENTITY* ent;
	var v_ent;
	
} ELEM;

// Diese function wird direct vor game_save aufgerufen (selber frame)
function f_before_save(ELEM* elem)
{
	elem.v_list=elem.list;
	elem.v_ent=elem.ent;
}

// Diese function wird direkt nach game_load aufgerufen (selber frame)
// Nach verlassen der Engine und bei erneutem load nach dem start gibt es hier den fehler/absturz
function f_after_load(ELEM* elem)
{
	elem.list=(LIST*)elem.v_list;
	elem.ent=(ENTITY*)elem.v_ent;
}

void* f_add_struct(long size)
{
	void* data = sys_malloc(size);// take space for the struct
	memset(data,0,size);// initalize the struct
	add_struct(data,size);// add struct for save function
	return data;
}

function f_man1(ENTITY* monster)
{
	elem=f_add_struct(sizeof(ELEM));
	elem.list=f_add_struct(sizeof(LIST));
	elem.ent=monster;
}



Ich freue mich sehr über jede Hilfe.:)

Re: game_save / load mit structs [Re: Benni003] #386893
11/10/11 17:07
11/10/11 17:07
Joined: Dec 2003
Posts: 988
Germany, Magdeburg
JoGa Offline
User
JoGa  Offline
User

Joined: Dec 2003
Posts: 988
Germany, Magdeburg
hm, ich bin was das unter vielem angeht selbst ein noob :-)
Aber meines Wissens sind die Pointer nur max. so lang gültig, wie die Engine läuft, danach wird der Speicher bereinigt.

Ich hab auch ein Speichersystem, das Gegenstände und Fertigkeiten (beides selbst erstellte Structs) speichert.
Dort habe ich es so gemacht, dass ich nicht die Pointer speichere, sondern die Dinge an sich.
Also z.B alle Eigenschaften eines Gegenstandes in eine txt-Datei einschreibe.
Beim Laden wird ein neues Gegenstands-scruct erzeugt und die Eigenschaften aus der txt-Datei ausgelesen und in den Struct reingeschrieben. Die Speicherzuweisung zu dem Struct dann ist der neue "pointer".
Ich hoffe, ich konnte dir weiterhelfen laugh

Re: game_save / load mit structs [Re: JoGa] #386906
11/10/11 20:11
11/10/11 20:11
Joined: Aug 2008
Posts: 394
Germany
Benni003 Offline OP
Senior Member
Benni003  Offline OP
Senior Member

Joined: Aug 2008
Posts: 394
Germany
ja, danke. Das ist natürlich auch eine Idee, auch wenn es bei ca. 30000 structs etwas aufwendig ist.
Da muss es noch eine bessere Lösung geben.
Es würde mich freuen, wenn sich JCL hier melden würde, schließlich gibt es dazu kein gutes Beispiel. Weder im Handbuch, noch hier im Forum.

Re: game_save / load mit structs [Re: Benni003] #386907
11/10/11 20:21
11/10/11 20:21
Joined: Dec 2003
Posts: 988
Germany, Magdeburg
JoGa Offline
User
JoGa  Offline
User

Joined: Dec 2003
Posts: 988
Germany, Magdeburg
30000 structs? Hui ^^ Da bin ich natürlich etwas überfordert.
Ich habe nur ca. 99 eigene Speicherzuweisungen und nur einen eigenen Struct.
Deren Speicheradresse speichere ich in ein Array, dem Array für das Inventar.
z.B array_inventar[99] und durchlaufe dann seinen Index in einer for schleife einer Funktion, in der dann für jeden struct die Daten ausliest und in einer txt-Datei abspeichert.

Last edited by JoGa; 11/11/11 11:40.
Re: game_save / load mit structs [Re: JoGa] #386935
11/11/11 11:17
11/11/11 11:17
Joined: Aug 2008
Posts: 394
Germany
Benni003 Offline OP
Senior Member
Benni003  Offline OP
Senior Member

Joined: Aug 2008
Posts: 394
Germany
Ich hoffe es weiß jemand Rat, denn es ist wirklich wichtig.

Re: game_save / load mit structs [Re: Benni003] #386938
11/11/11 12:02
11/11/11 12:02
Joined: Apr 2007
Posts: 3,751
Canada
WretchedSid Offline
Expert
WretchedSid  Offline
Expert

Joined: Apr 2007
Posts: 3,751
Canada
Was spricht gegen selber serialisieren?


Shitlord by trade and passion. Graphics programmer at Laminar Research.
I write blog posts at feresignum.com
Re: game_save / load mit structs [Re: WretchedSid] #386942
11/11/11 13:03
11/11/11 13:03
Joined: Aug 2008
Posts: 394
Germany
Benni003 Offline OP
Senior Member
Benni003  Offline OP
Senior Member

Joined: Aug 2008
Posts: 394
Germany
Mein Programm ist recht komplex, deshalb wird es nicht einfach werden.
Kannst du mir einen Rat geben, wie ich die funktionen wieder korrekt weiterführen kann, denen Pointer zugewiesen wurden, die nun nicht mehr existieren?
Und wie kann ich einem Strukt die Richtigen Pointer wieder zuweisen?
Sollte ich jedem Struct eine id zuweisen, um sie beim laden als Pointer dem Richtigen Objekt(Struct) wieder zuweisen zu können?

Re: game_save / load mit structs [Re: Benni003] #387031
11/13/11 00:54
11/13/11 00:54
Joined: Aug 2008
Posts: 394
Germany
Benni003 Offline OP
Senior Member
Benni003  Offline OP
Senior Member

Joined: Aug 2008
Posts: 394
Germany
Ich bin gerade dabei eine eigene Speicher Funktion zu schreiben.
Ich glaube jetzt bekomme ich es gemeistert.
Danke noch mal für deine Hilfe JoGa


Moderated by  HeelX, Lukas, rayp, Rei_Ayanami, Superku, Tobias, TWO, VeT 

Gamestudio download | chip programmers | Zorro platform | shop | Data Protection Policy

oP group Germany GmbH | Birkenstr. 25-27 | 63549 Ronneburg / Germany | info (at) opgroup.de

Powered by UBB.threads™ PHP Forum Software 7.7.1