Hallo mal wieder!
Ich habe schon vor einiger Zeit entdeckt, dass jedes Mal wenn ich in meinem Spiel im Map Editor eine Map lade, der benutzte Arbeitsspeicher wächst und wächst ...
und dachte, das würde einfach daran liegen, dass ich nur sprite_add() ohne vorheriges Löschen von alten Sprites verwende.
Für die Modding-Möglichkeiten die mein Spiel bieten soll ist es essentiell, dass die Ressourcen extern geladen werden.
Nun habe ich die letzten paar Tage herumprobiert, habe sprite_replace, sprite_add mit vorigem sprite_delete ausführen lassen,
habe mein Spriteladesystem komplett überdacht, nur um dann drauf zu kommen, dass sich nichts geändert hat ... rein GAR nichts!
Heute habe ich mich umgesehen und gegooglet, und bin dann auf das hier gestoßen:
vom Yoyogames Tech Blog
Das ist in meinen Augen irgendwie eine Frechheit.
Als würde sich Yoyogames bewusst sein, dass sie da einen dicken Memory-Leak eingebaut haben und ihn einfach nicht entfernen wollen, da Studio "eh nur für kleine Spiele gedacht ist".
Ich habe bisher keinen Weg gefunden, erstellte Texture Pages ingame wieder zu löschen und habe auch mit der Funktion draw_texture_flush() herumexperimentiert, jedoch ohne Erfolg.
Und als ich das Laden der externen Sprites einmal ausgestellt hatte, war ich überrascht zu sehen, dass der Arbeitsspeicher sich zwar nicht mehr so schnell füllt wie vorher, aber immer noch langsam voller wird
(ca. 200 mb pro Ladevorgang des Spritepakets, ca. 50 mb ohne), d.h. dass der Memory-Leak auch da ist wenn man nur Sprites verwendet, die sich brav nach Yoyogames-Vorgabe im Ressourcenbaum befinden ...
Meine Frage jetzt, da ich gesehen habe, dass das Thema schonmal aufgekommen ist, gibt es irgendeinen Umweg? Irgendeine DLL die man, zumindest für Windows verwenden kann? Oder sind größere Projekte mit Map-Editor jetzt nicht mehr dafür gedacht mit dem GM gemacht zu werden und es gibt keinen Ausweg? Irgendwie ein wenig frustrierend, wenn der Gamemaker solche Schranken setzt ...
Ich habe schon vor einiger Zeit entdeckt, dass jedes Mal wenn ich in meinem Spiel im Map Editor eine Map lade, der benutzte Arbeitsspeicher wächst und wächst ...
und dachte, das würde einfach daran liegen, dass ich nur sprite_add() ohne vorheriges Löschen von alten Sprites verwende.
Für die Modding-Möglichkeiten die mein Spiel bieten soll ist es essentiell, dass die Ressourcen extern geladen werden.
Nun habe ich die letzten paar Tage herumprobiert, habe sprite_replace, sprite_add mit vorigem sprite_delete ausführen lassen,
habe mein Spriteladesystem komplett überdacht, nur um dann drauf zu kommen, dass sich nichts geändert hat ... rein GAR nichts!
Heute habe ich mich umgesehen und gegooglet, und bin dann auf das hier gestoßen:
vom Yoyogames Tech Blog
Loading sprites and backgrounds from an external source can be done in GameMaker:Studio, as can creating new assets using functions like sprite_duplicate(). However each new asset that you create in this way will also create a new texture page, meaning that (for example) adding 10 new sprites will create 10 new texture pages! And each time you draw these sprites it is a new texture swap and a break in the batch to the graphics card.
As you can imagine, this is not very efficient, and so (unlike previous versions of GameMaker) it should be avoided, with all the graphic assets being added to the game bundle from the IDE. Note that you can use these functions for adding/creating small numbers of things and they won't adversely affect performance, but adding many, many images in this way should always be avoided as it will have an impact.
Das ist in meinen Augen irgendwie eine Frechheit.
Als würde sich Yoyogames bewusst sein, dass sie da einen dicken Memory-Leak eingebaut haben und ihn einfach nicht entfernen wollen, da Studio "eh nur für kleine Spiele gedacht ist".
Ich habe bisher keinen Weg gefunden, erstellte Texture Pages ingame wieder zu löschen und habe auch mit der Funktion draw_texture_flush() herumexperimentiert, jedoch ohne Erfolg.
Und als ich das Laden der externen Sprites einmal ausgestellt hatte, war ich überrascht zu sehen, dass der Arbeitsspeicher sich zwar nicht mehr so schnell füllt wie vorher, aber immer noch langsam voller wird
(ca. 200 mb pro Ladevorgang des Spritepakets, ca. 50 mb ohne), d.h. dass der Memory-Leak auch da ist wenn man nur Sprites verwendet, die sich brav nach Yoyogames-Vorgabe im Ressourcenbaum befinden ...
Meine Frage jetzt, da ich gesehen habe, dass das Thema schonmal aufgekommen ist, gibt es irgendeinen Umweg? Irgendeine DLL die man, zumindest für Windows verwenden kann? Oder sind größere Projekte mit Map-Editor jetzt nicht mehr dafür gedacht mit dem GM gemacht zu werden und es gibt keinen Ausweg? Irgendwie ein wenig frustrierend, wenn der Gamemaker solche Schranken setzt ...