TMAP

Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Neue Antwort erstellen

Apprauuuu

Betreff: TMAP

BeitragMi, Okt 03, 2007 13:59
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallihallo!
Leider ist BMax ja eher schlecht als recht dokumentiertb und deshalb bin ich auch noch nicht so ganz hinter gekommen (auch nicht mit Google) was es mit dem Map-Befehl genau auf sich hat...

Soweit ich mitbekommen habe, hat diese Sparte eine Ähnlichkeit mit Listen aber kann mir jemand bitte erklären wo da der genaue Unterschied liegt??
Arbeitsstand:
Umprogrammierung von LOL³Warriors und LOL³Fighters in Bmax...
LOL³Fighters wird spielerisch noch mal ordentlich aufpoliert, um es Ligatauglich zu machen (zumindest für private Funligen von mir ^^)

Suco-X

Betreff: ......

BeitragMi, Okt 03, 2007 14:09
Antworten mit Zitat
Benutzer-Profile anzeigen
In eine Liste speicherst du einfach nur Objekte und kannst sie mit einer Foreach Schleife durchgehen. Bei einer Map kannst du jedem Objekt einen Namen geben (Key) und mit diesem Namen kannst du das Objekt wieder aus der Liste erhalten.
z.b.

Code: [AUSKLAPPEN]

ImgObjekt:TImage = LoadIMage(...)
Map.Insert("testbild", ImgObjekt)
Img:TImage = TImage(Map.ValueForKey("testbild"))


Mfg
Intel Core 2 Quad Q8300, 4× 2500 MHz, 4096 MB DDR2-Ram, GeForce 9600GT 512 MB

Vertex

BeitragMi, Okt 03, 2007 14:21
Antworten mit Zitat
Benutzer-Profile anzeigen
TMap ist eine Implementierung von Rot-Schwarz-Bäumen.

Ich pers. nutze TMap zum verwalten von Resourcen. Ich habe bspw. eine Resource namens "mousepointer".
Statts nun mein Projekt mit tausenden globalen Variablen voll zu müllen, nutze ich einen Resourcemanager der abgeleitet von TMap ist.

Die Referenz, die ich mit LoadImage zurück bekomme verbinde ich mit dem Hashwert "mousepointer" und kann dann in der Hauptschleife bspw. mit DrawImage(Resources.Image("mousepointer"), MouseX(), MouseY()) auf sie zugreifen.

Code: [AUSKLAPPEN]
Type TResourceManager Extends TMap
   Const RESOURCE_IMAGE     : Int = 1, ..
         RESOURCE_ANIMIMAGE : Int = 2, ..
         RESOURCE_FONT      : Int = 3, ..
         RESOURCE_SOUND     : Int = 4

   Method Image:TImage(Name:String)
      Local Image : TImage

      Image = TImage(Self.ValueForKey(Name))
      If Not Image Then Throw("Image resource '" + Name + "' not found")

      Return Image
   End Method

   Method Font:TImageFont(Name:String)
      Local Font : TImageFont

      Font = TImageFont(Self.ValueForKey(Name))
      If Not Font Then Throw("Font resource '" + Name + "' not found")

      Return Font
   End Method

   Method Sound:TSound(Name:String)
      Local Sound : TSound

      Sound = TSound(Self.ValueForKey(Name))
      If Not Sound Then Throw("Sound resource '" + Name + "' not found")

      Return Sound
   End Method

   ' ...
End Type


Damit habe ich auch gleich ein leichteres Debugging. Sollte mal eine Resource nicht geladen wurden sein und ich greife dennoch auf sie zurück, kommt nicht ein "Unhandeld memory exception" sondern "Image resource 'mousepointer' not found".

Weiterhin definiere ich mir alle Resourcen ganz bequem in DefDatas. Hier ein kleiner Ausschnitt:
Code: [AUSKLAPPEN]
#Startup
   DefData "mousepointer", TResourceManager.RESOURCE_IMAGE, ..
           "MousePointer.png"
   DefData "background", TResourceManager.RESOURCE_IMAGE, ..
           "Background.png"
   DefData "startlogo", TResourceManager.RESOURCE_IMAGE, ..
           "StartLogo.png"
   DefData "progressbar", TResourceManager.RESOURCE_ANIMIMAGE, ..
           "ProgressBar.png", 440, 43, 0, 3

   DefData "-"

#Resources
   ' Images
   DefData "logo", TResourceManager.RESOURCE_IMAGE, ..
           "Logo.png"
   DefData "mediabar", TResourceManager.RESOURCE_IMAGE, ..
           "MediaBar.png"

   ' Fonts
   DefData "calibri14", TResourceManager.RESOURCE_FONT, ..
           "Calibri.ttf", 14
   DefData "calibri20", TResourceManager.RESOURCE_FONT, ..
           "Calibri.ttf", 20

   ' Sounds
   DefData "click", TResourceManager.RESOURCE_SOUND, ..
           "Click.wav"
   DefData "pick", TResourceManager.RESOURCE_SOUND, ..
           "Pick.wav"

   DefData "-"


Ich sage dann einfach nur noch Resources.Load() und er lädt alle Resourcen die in DefData definiert sind. Weiterer Vorteil bei dieser Variante ist, dass ich bei den Resourcen eine OnLoaded Funktion übergeben kann. Immer wenn eine Resource geladen wurde, kann ich dass in einer ProgressBar deutlich machen.

Aber das geht schon wieder zuweit. Mit TMap kann man auch weitere Dinge anstellen, siehe Wiki.

mfg olli
vertex.dreamfall.at | GitHub

Apprauuuu

BeitragMi, Okt 03, 2007 15:09
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke sehr für die schnellen Antowrten!!
Das ist ja echt super!
Jetzt kann ich TMaps benutzen anstatt wie früher in B3d meine Objekte in Arrays abspeichern zu müssen, wenn sie einzeln ansprechbar sein sollten.
Arbeitsstand:
Umprogrammierung von LOL³Warriors und LOL³Fighters in Bmax...
LOL³Fighters wird spielerisch noch mal ordentlich aufpoliert, um es Ligatauglich zu machen (zumindest für private Funligen von mir ^^)
 

Dreamora

BeitragMi, Okt 03, 2007 15:18
Antworten mit Zitat
Benutzer-Profile anzeigen
In eine TMap speichert man nur Dinge die über einen Key (normalerweise Namen) ansprechbar sein sollen.

Je nachdem können TList und BM Arrays (die mit Slicing auch sehr mächtig sind) die bessere Wahl sein.

Und nur fürs Protokoll: Bei der Windows Demo KEINE TMaps benutzen.
Damals wars noch kein RB Tree sondern ein Binary Tree der nicht balanciert wird.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group