Quellcode
Dieser Text ist idealerweise für BlitzBasic-Codes gedacht. Kann zum Teil aber auch bei anderen Programmiersprachen in ähnlicher Weise hilfreich sein. Hinweis: Quellcodes zu anderen Programmiersprachen sind Projekte anderer Programmierer.

Mapengine einbauen
Die fix und fertige Mapengine befindet sich im Ordner "Source\BlitzBasic\Mapengine". Kopiere den ganzen Ordner in ein anderes Verzeichnis. Die Datei preview_bb2d.bb kann auch als Vorlage genommen werden - kopiere diese Datei ebenfalls. Wichtig ist diese Zeile:

Include "mapengine\mapengine.bb"

Der Code ist mit BBplus geschrieben, ist aber auch für BB2D und BB3D geeignet. Die Befehle LoadImage und LoadAnimImage haben in BBplus einen zusätzlichen Parameter am Ende. Falls das Programm in BB2D/BB3D nicht starten will, entferne einfach den letzten Parameter ",2" bei den genannten Befehlen.

Objekt finden und manipulieren
Nachdem eine Map-Datei mit dem der Funktion map_load() galaden wurde, können Objekte an dem Namen identifiziert werden. Benutze dazu diese Funktionen:

obj.layer=layer_find("obj")
oder
obj.geo=geo_find("obj")

Typischerweise werden wichtige Objekte nur 1x nach dem Laden gesucht, um diese eindeutig zu identifizieren. Nun kann man auf das identifizierte Objekt 'obj' zugreifen und Eigenschaften manipulieren:

obj\ascii
Alle Objekte: Ermittelt, ob Metadaten als Binär (0) oder Ascii (1) vorliegen. Hinweis: Ascii-Daten sollen dann noch manuell nach String konvertiert werden!

obj\bank1
Layer: Memory Bank Handle zu Basisdaten. Basisdaten enthalten Tile-Werte, nach denen ein Layer gezeichnet wird.

obj\bank2
Layer: Memory Bank Handle zu Datenlayer.

obj\bank3
Alle Objekte: Memory Bank Handle zu Metadaten.

obj\bank4
Alle Objekte: Memory Bank Handle zu Variablen.

obj\code
Alle Objekte: Objektart (1=Map, 2=Iso1, 3=Iso2, 4=Hex1, 5=Hex2, 6=Klon, 7=Bild, 8=Block, 9=Punkt, 10=Linie, 11=Rechteck, 12=Oval)

obj\depth1
Layer: Basisdaten-Tiefe in Bit

obj\depth2
Layer: Datenlayer-Tiefe in Bit

obj\frame
Bild oder Block: Framenummer (hartcodiert)

obj\layer
Klon oder Block: Layer-Handle zu einem Referenzobjekt

obj\mask
Map, Bild oder Block: Grafik-Maskierung aus (0) oder ein (1)

obj\mode
Bild oder Block: Animationsmodus (0=Std, 1=Pause, 2=Vorwärts, 3=Rückwärts)
Map-Layer: Layerwiederholung (0=nein, 1=ja)

obj\name$
Alle Objekte: Name eines Objekts

obj\parax
Block: Justage X
Andere Objekte: Parallax X-Wert

obj\paray
Block: Justage Y
Andere Objekte: Parallax Y-Wert

obj\posx
Block: Tilekoordinate X
Andere Objekte: Pixelkoordinate X

obj\posy
Block: Tilekoordinate Y
Andere Objekte: Pixelkoordinate Y

obj\sizex
Layer: Layerbreite in Tiles
Linie: Endpunkt X
Rechteck: Objektbreite
Oval: Radius X

obj\sizey
Layer: Layerhöhe in Tiles
Linie: Endpunkt Y
Rechteck: Objekthöhe
Oval: Radius Y

obj\start
Iso2, Hex1 oder Hex2: Tile Shift aus (0) oder ein (1)
Bild oder Block: Startframe einer Animation

obj\tile
Layer, Bild oder Block: Tileset-Handle

obj\time
Bild oder Block: Letzter Millisecs-Wert bei unabhängiger Animation (TMP)

obj\tmp
Bild oder Block: Letzter Frame-Wert bei unabhängiger Animation (TMP)

obj\visible
Alle Objekte: Objekt unsichtbar (0) oder sichtbar (1)

Hintergrund
Hintergrund wird nicht als Objekt gespeichert. Alle Daten werden in globalen Variablen in Inklude Map gespeichert und beginnen mit dem Prefix "map_". Diese Variablen haben identische Bezeichnungen wie die Eigenschaften von Layer-Objekten.

Anfängerschritte
Erste Schritte
1) Benutze map_load(), um Map-Datei und Map-Grafiken zu laden
2) Überprüfe zurückgelieferten Wert auf Fehler
3) Identifiziere wichtige Objekte

Hauptschleife
1) Modifiziere Objektpositionen (layer\posx, layer\posy)
2) Modifiziere Kameraposition mit map_scroll()
3) Aktualisiere Animationen mit tile_animate()
4) Benutze CLS oder zeichne Hintergrund, falls erforderlich
5) Zeichne komplette Karte mit map_draw() ein
6) Zeichne Overlay-Grafiken
7) Benutze FLIP

Mauskoordinaten nach Tile-Koordinaten konvertieren
1) Bestimme Mauskoordinaten
2) Benutze layer_map_coord(), layer_iso1_coord() usw.

Globale Objekt-Koordinaten nach Tile-Koordinaten konvertieren
1) Bestimme globale Objekt-Koordinaten
2) Konvertiere globale Koordinate mit map_getscreen()
2) Benutze layer_map_coord(), layer_iso1_coord() usw.

Tilewert auslesen
1) Bestimme Tile-Koordinate
2) Benutze layer_getcode() und layer_getvalue(), um Tilewert auszulesen
Tipp) Benutze layer_setvalue, um Tilewert zu setzen

Datenwert auslesen
1) Bestimme Tile-Koordinate
2) Benutze layer_getdata(), um Datenwert auszulesen
Tipp) Benutze layer_setdata, um Datenwert zu setzen