Images richtig aus datei laden

Übersicht BlitzMax, BlitzMax NG Allgemein

Neue Antwort erstellen

Ana

Betreff: Images richtig aus datei laden

BeitragFr, Nov 05, 2010 12:02
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallihallo,

also folgendes liegt mir auf der Seele:
Ich hab ein tool geschrieben, mit dem man Einheiten erstellen kann, die haben sinnvollerweise auch ein Image. Jetzt bin ich mir unsicher wie ich die speichern sollte, denn eigentlich möchte ich nicht einfach alle datein die in dem Ordner liegen mit global loadimage ... laden sondern nur die, die auch wirklich verwendet werden, also sollte jede einheit den pfad ihrer images speichern und es dann laden. Problem dabei ist wenn öfter das selbe Image verwendet wird, liegt es ja mehr mals im Speicher rum, was mir nicht gefällt.

Meine nächte Idee wäre, erstmal zu schauen welche images gebraucht werden, die Pfade dann in einer Liste zuspeichern, dann die größe der Liste feststellen, ein passendes Array erzeugen und der Einheit nur noch den Index mitgeben. Allerdings erscheint mir das eventuell ein wenig unelegant.

Hat jemand da eine schöne Idee wie man das verwirklich kann?
Don't only practice your art,
but force your way into its secrets,
for it and knowledge
can raise human to divine
 

Sterbendes Lüftlein

BeitragFr, Nov 05, 2010 12:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Text entfernt

Ana

BeitragFr, Nov 05, 2010 12:34
Antworten mit Zitat
Benutzer-Profile anzeigen
Das ganze ist aber ein wenig dynamischer, das Spiel als solches hat keine Einheiten, sondern die werden in einem Programm nachher angelegt und in der gui sind dann alle passenden Images angezeigt und werden dann ausgesucht. Also weiß ich vorher weder welche images da sind, noch welche davon gebraucht werden, da sollen auch ruhig ein paar "image-leichen" im ordner sein.
Don't only practice your art,
but force your way into its secrets,
for it and knowledge
can raise human to divine

Xeres

Moderator

BeitragFr, Nov 05, 2010 13:12
Antworten mit Zitat
Benutzer-Profile anzeigen
Einzelne Listen/Arrays oder man Kapselt die Types etwas...
BlitzMax: [AUSKLAPPEN]
Type TEinheit
Field Image:TMyImage
End Type

Type TMyImage
Field Image:TImage
Field Path:String

Method Load()
If Self.Image = Null Then LoadImage(Self.Path)
End Method
End Type

Erst lädst du die Daten - Pfad oder name für ein Bild kann X mal auftauchen, davon erstellst du halt bloss eine Instanz die das tatsächliche Bild enthält, und jedes Objekt, dass das Bild braucht, bekommt die Referenz dahin.
Je nach dem, wie es dir lieber ist, aber der Ansatz ist schon gut.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

Shinkiro1

ehemals "Espada"

BeitragFr, Nov 05, 2010 15:48
Antworten mit Zitat
Benutzer-Profile anzeigen
Oder du hast in dem Einheitstyp ein globales image:

BlitzMax: [AUSKLAPPEN]

Type MyEinheit
Global image:TImage

Method New()
If Not image Then image = LoadImage("Pfad")
EndMethod

EndType


Ich kann dir zwar nicht sagen wie nützlich das ist, aber ich werde mir einen Ressourcenmanager basteln.
Sprich: Alle geladenen images werden in einer TMap gespeichert( key = pfad, value = das TImage ). Beim Laden einer neuen Ressource wird abgefragt ob das Bild schon geladen wurde:
=> wenn ja, wird das neue einfach eine Referenz zum anderen
=> wenn nein, wird das image geladen und in die TMap eingetragen

mfg
shinkiro1

mpmxyz

BeitragFr, Nov 05, 2010 15:54
Antworten mit Zitat
Benutzer-Profile anzeigen
Xeres Lösung kann man noch gegen doppelt geladene Bilder ausbauen:
BlitzMax: [AUSKLAPPEN]

Type TMyImage
Global loadedImages:TMap=New TMap
Field Image:TImage
Field Path:String

Function Create:TMyImage(path:String)
Local img:TMyImage=New TMyImage
img.Path=path
Return img
EndFunction

Method Load()
If Image=Null
Image=TImage(loadedImages.ValueForKey(path)) 'Schon geladen?
If Image=Null
Image=LoadImage(path) 'Das Bild wurde noch nie geladen.
If Image<>Null
loadedImages.Insert(path,Image)
EndIf
EndIf
EndIf
EndMethod

Method GetImage:TImage()
Load()
Return Image
EndMethod

Function ResetList()
loadedImages.Clear()
EndFunction
EndType

Die Erklärung dazu hat jemand anderes parallel dazu geschrieben. Wink
mfG
mpmxyz
Moin Moin!
Projekte: DBPC CodeCruncher Mandelbrot-Renderer

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group