Ich kann nicht kommentieren, also werde ich nur meine Idee hier setzen. Deklarationszeit: Ich bin auch Autodidakt, also ist der Algorithmus, den ich benutze, nicht der Standard oder so etwas. Ich hoffe es hilft!
Ich verwende eine einzige Klasse namens GContent Hexe ist "instanziert" (mehr wie geladen) die erste Sache, wenn das Spiel beginnt. Diese Klasse ist statisch und enthält Listen für alle Texturen, Sounds und Spritefonts im Spiel. Also, überall in meinem Code kann ich setzen GContent.Texture("texture_folder\\texture_name");
(ähnlich für Sound und Spritefont). Jetzt, bevor diese Funktion Texture2D
lädt, überprüft sie ihre Liste von Texturen und versucht, eine Textur mit dem Namen zurückzugeben, nach dem im Parameter gefragt wird. Wenn es die richtige Textur findet, wird die Textur aus der Liste zurückgegeben. Wenn nicht, verwendet es Content.Load(textureFullPath);
(mit vollem Pfad meine ich nicht "C: \ Users \ ...."), um die Textur zu laden, geben Sie ihr einen Namen (Texture2D.Name
) gleich dem Parameter textureFullPath
, fügt diese Textur hinzu Liste und dann gibt die neue Textur zurück.
Also, je mehr du mein Spiel spielst, desto mehr Texturen werden geladen, wenn ich nicht alle Assets zu Beginn des Spiels geladen habe. Nun, ich denke, Sie einfach eine Reihe von string
s haben können, die alle Texturen darstellen, die von einer einzigen Ebene verwendet werden, oder eine Karte, oder im Hauptmenü ... Auf diese Weise könnten Sie easaly Funktion erstellen, die List< string >
nehmen und versuchen, lade oder entlade alle Texturen einer Karte/Ebene/Menü ...
Also, meine Antwort ist so ziemlich: habe eine statische Klasse mit Listen von Assets und Laden/Entladen von Assets von wo auch immer im Spiel Sie wollen!
Auch, wenn meine Antwort Ihnen geholfen, bitte überprüfen Sie es als Antwort :)
Chancen zu helfen sind, dass Sie nicht wirklich alle 1000 Texturen zur gleichen Zeit benötigen. Also entlade sie, wann immer du sie nicht brauchst.Aber beginnen Sie am besten damit zusammenhängende Texturen zu einem einzigen Bild zusammenzufügen (auch als Spritesheet bekannt) – Falgantil
Vielen Dank für Ihre Antwort. Ja, du hast Recht, und genau deshalb habe ich meine Frage gestellt :) Was ist: Wie lade ich die Texturen zu anderen Zeitpunkten als beim Start? (Und wie entlade ich sie, wenn ich das tun muss?) –
Sie können Texturen jederzeit laden, stellen Sie nur sicher, dass Sie sie nur einmal laden. und wenn Sie sie nicht brauchen, entsorgen Sie sie einfach. –