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)
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.:)