2016-05-07 2 views
0

Ich und ein Freund arbeiten an einem Spiel, und im Rahmen der Verschlankung von Code (wir haben es ursprünglich für einen Gamejam geschrieben, ist dieser Code überhaupt nicht sauber: p) er beschloss, den Asset Loader so einzurichten, dass er es war lädt jedes Mal Sprites aus einer Datei, wenn sie angefordert werden.Pygame: Ist es besser, ein Bild mehrmals zu laden oder eine Oberfläche im Speicher zu behalten?

Dies scheint ein bisschen schwer für mich. Wird Festplatten-I/O nicht zu einer großen Verlangsamung, wenn wir das tun? Oder mache ich mir hier nichts Sorgen? Ich habe seine letzten Änderungen nicht angeschaut, aber ich nehme an, dass er plant, dies später zu erweitern, um mit Soundeffekten und Musik umzugehen.

Der Code ist hier: https://github.com/avivbeeri/GameJam

Irgendwelche Gedanken oder Einsicht würde geschätzt!

+0

Es wäre hilfreich, wenn Sie ein relevantes Code-Snippet in Ihre Frage schreiben könnten, anstatt nur mit Github zu verlinken. – fractalwrench

+0

Wenn Sie nicht viel Speicher haben, halten Sie einfach die Oberfläche herum. Wenn Sie jedoch nicht über so viele Assets verfügen, kann das erneute Laden von der Festplatte die verschiedenen Caches betreffen und sehr schnell sein. Ymmv. – Tibo

+0

Der Speicherzugriff ist schneller als der Festplattenzugriff, also würde ich Speicher sagen, es sei denn, Sie haben nur sehr wenig Speicher und können nicht. – marienbad

Antwort

0

Es ist viel besser, die Oberfläche im Speicher zu behalten. Das Einlesen des Bildes ist ein mehrstufiger Prozess, der den Code während der Ausführung einfriert (es sei denn, Sie führen ein Threading durch). Ich meine, wenn Sie nicht mehr als 500 Oberflächen im Speicher haben, werden Sie nicht wirklich auf ein Problem stoßen. Aber wenn Sie zu dem Punkt gelangen, 500+ Bilder zu haben, wäre die beste Lösung, einen Motor aus einem niedrigeren Niveau wie C sowieso zu machen.

Kurze Antwort: Das Laden des Bildes jedes Mal, wenn es verwendet wird, ist langsamer und schlechter Übung als nur im Speicher zu halten.