Hallo allerseits,
mal wieder da mit einem Problem was mich überfordert.
Mein Spiel besteht aus 3 Räumen: Init (30 fps), Titelmenü (30 fps), Spielfeld (60 fps). Die ersten beiden Räume laufen alle normal. Der Speicher wird mit 60 MB belastet. Alle Ressourcen werden extern in das Spiel geladen sobal sie gebraucht werden.
Sobald ich allerdings das Hauptspiel beginnen will füllt sich der Speicher jede Sekunde um 20 MB und die FPS sackt sofort in den Keller auf 2-1 FPS. Ich habe mir das mal ein paar Minuten angeschaut. Als dann das Spiel 2,7 GB im Speicher eingenommen hat, habe ich es dann dochmal beendet. Die CPU-Auslastung geht auf über 70% hoch wenn der Raum aufgerufen wird.
Wenn der Raum aktiv ist laufen "nur" 6 Instanzen (es sei angemerkt das die Alphaversion noch mit 118 Objekten arbeitete und nicht mal annährend 2% an Prozessorleistung forderte, ebensowenig überschüttete er den Arbeitsspeicher.
Was zu wissen ist:
Ein Objekt ist in dem Spielfeld vorhanden was alles steuert. Es besitzt 1 Create-Event und 1 Draw-Event, kein Step-Event oder so was als zusätzliche Belastung in Frage kommen würde.
2 Scripte werden aufgerufen. Eins im Create-Event und eins im Draw-Event. Ich habe das Problem eingrenzen können um nicht alle 80 Skripte aufzeigen zu müssen.
Wenn ich das Script was die Spielsteine zeichnet ausklammere (also deaktiviere) bleibt beim Aufruf des Game-Raums die FPS konstant bei 60 und der Speicher ist wie zuvor auch nur mit 60 MB belastet.
Ich poste mal den Code des Scriptes was dies scheinbar verursacht:
Alles anzeigen
global.SteinKoord ist eine Map die insgesamt 64 Koordinaten der Spielsteine samt des Namens enthält.
Die verschachtelten Schleifen sind dazu da alle 64 Koordinaten richtig auszulesen, da die Positionen ja bestimmt sind.
Ich könnte ja verstehen das wenn das Script in jedem Step aufgerufen werden würde er solche Faxen macht - aber dieses Script wird ein einziges Mal aufgerufen.
Ich habe dieses Phänomen schonmal damals gesehen - es tauchte auf, als eine Schleife ins unendliche weiterzählte und nicht mehr wusste wann sie aufhören sollte.
Aber dies ist ja hier nicht der Fall. Die Schleifen sind begrenzt durch meine Konstanten zwidth und zheight die jeweils den Wert 8 enthalten.
Habe grade echt Tomaten auf den Augen und auch keine Idee was hier verkehrt läuft. Ihr vielleicht ne Idee?
Danke euch schonmal.
LG
zero-tx
mal wieder da mit einem Problem was mich überfordert.
Mein Spiel besteht aus 3 Räumen: Init (30 fps), Titelmenü (30 fps), Spielfeld (60 fps). Die ersten beiden Räume laufen alle normal. Der Speicher wird mit 60 MB belastet. Alle Ressourcen werden extern in das Spiel geladen sobal sie gebraucht werden.
Sobald ich allerdings das Hauptspiel beginnen will füllt sich der Speicher jede Sekunde um 20 MB und die FPS sackt sofort in den Keller auf 2-1 FPS. Ich habe mir das mal ein paar Minuten angeschaut. Als dann das Spiel 2,7 GB im Speicher eingenommen hat, habe ich es dann dochmal beendet. Die CPU-Auslastung geht auf über 70% hoch wenn der Raum aufgerufen wird.
Wenn der Raum aktiv ist laufen "nur" 6 Instanzen (es sei angemerkt das die Alphaversion noch mit 118 Objekten arbeitete und nicht mal annährend 2% an Prozessorleistung forderte, ebensowenig überschüttete er den Arbeitsspeicher.
Was zu wissen ist:
Ein Objekt ist in dem Spielfeld vorhanden was alles steuert. Es besitzt 1 Create-Event und 1 Draw-Event, kein Step-Event oder so was als zusätzliche Belastung in Frage kommen würde.
2 Scripte werden aufgerufen. Eins im Create-Event und eins im Draw-Event. Ich habe das Problem eingrenzen können um nicht alle 80 Skripte aufzeigen zu müssen.
Wenn ich das Script was die Spielsteine zeichnet ausklammere (also deaktiviere) bleibt beim Aufruf des Game-Raums die FPS konstant bei 60 und der Speicher ist wie zuvor auch nur mit 60 MB belastet.
Ich poste mal den Code des Scriptes was dies scheinbar verursacht:
GML-Quellcode
- var spr, spr1;
- for (i = 0; i < zwidth; i += 1)
- {
- for (j = 0; j < zheight; j += 1)
- {
- spr1 = ds_map_find_value(global.SteinKoord, "x"+string(i) + "y"+string(j));
- spr = sprite_add_alpha(gfx_dir + "steine\" + spr1, subimg,1,0,0,0);
- sprite_set_offset(spr, sprite_get_width(spr) / 2, sprite_get_height(spr) / 2); // Der exakte Mittelpunkt aus Höhe und Breite wird ermittelt und festgelegt
- draw_sprite(spr, subimg, boardXStart + (steingr * i), boardYStart + (steingr * j));
- }
- }
global.SteinKoord ist eine Map die insgesamt 64 Koordinaten der Spielsteine samt des Namens enthält.
Die verschachtelten Schleifen sind dazu da alle 64 Koordinaten richtig auszulesen, da die Positionen ja bestimmt sind.
Ich könnte ja verstehen das wenn das Script in jedem Step aufgerufen werden würde er solche Faxen macht - aber dieses Script wird ein einziges Mal aufgerufen.
Ich habe dieses Phänomen schonmal damals gesehen - es tauchte auf, als eine Schleife ins unendliche weiterzählte und nicht mehr wusste wann sie aufhören sollte.
Aber dies ist ja hier nicht der Fall. Die Schleifen sind begrenzt durch meine Konstanten zwidth und zheight die jeweils den Wert 8 enthalten.
Habe grade echt Tomaten auf den Augen und auch keine Idee was hier verkehrt läuft. Ihr vielleicht ne Idee?

Danke euch schonmal.
LG
zero-tx
Wenns nach mir ginge bei einem meiner Projekte:
Alles anzeigen
GML-Quellcode
- global.ProgrammNotFinish = 1;
- if (global.ProgrammNotFinish)
- {
- for (i=0; i<5; i += 1)
- {
- instance_create(x + i,y + i, objzerotx + i);
- }
- objzerotx1.task = "Erstelle Grafiken";
- objzerotx2.task = "Erstelle Sound";
- objzerotx3.task = "Erstelle Effekte und Doku";
- objzerotx4.task = "Programmiere";
- objzerotx5.task = "Kümmer dich um deine Frau!!!";
- }