Archiv verlassen und diese Seite im Standarddesign anzeigen : Terrain in Zelle ändern?
UhuSchuhu
09.11.2011, 07:20
Hallo,
ist ja im Standard-Paket nicht vorgesehen, aber vielleicht hat jemand sowas mal als Script gesehen (meine Suche brachte leider kein Erfolg):
Ich möchte, während der Laufzeit, das verwendete Terrain-Stück in einer Zelle ändern. Ist das möglich oder sind die Maps, sobald das Spiel läuft, statisch? Da das ganze wohl häufiger stattfinden wird wäre mir eine flexible Lösung lieber als das nutzen von Events (auch wenn das eigentlich ausreichen würde, da ich hier keinen Zugriff auf Autotiles brauche. Würde aber trotzdem ein rieseiger Wirrwarr werden). Hat jemand sowas oder ein Workaround?
(Ich erwarte dringend positive Antworten hier :))
Zuallererst öffnest du den Script Editor und suchst in der Liste auf der linken Seite eine Klasse welche "Game_Map" heist.
In diese Klasse fügst du als Script an irgendeiner Stelle* folgende Zeilen Code ein:
def set_map_data(x,y,z,value)
@map.data[x,y,z] = value
end
*Bedeutet natürlich, dass es innerhalb der Definition für die Klasse sein soll.
Danach solltest du in der Lage sein jederzeit über Custom script von einem Event aus, oder natürlich auch innerhalb eines anderen Ruby-Scripts, folgende Zeilen aufrufen zu können um die Map zu verändern:
$game_map.set_map_data(x,y,z,terrain_id)
Dies läuft nach folgendem Prinzip:
x und y sind die X- und Y-Koordinaten der Zelle auf der Tilemap welche du verändern willst. Du beginnst zu zählen bei 0/0 in der linken oberen Ecke der Map. Also, x = 0 und y = 0 wäre die linke obere Ecke.
z ist die Nummer für den Layer in welchem du das Tile verändern willst. z = 0 bedeutet im niedrigsten Layer, dementsprechend sind die folgenden Layer z = 1 oder z = 2.
Die terrain_id ist die Nummer des Tiles in deinem Tileset. Du musst dabei bedenken, dass die ersten 384 Nummern für die Autotiles verwendet werden! Das allererste Tile in deinem Tileset, also das erste Tile, hat die Nummer 384. 0 - 383 sind für die Autotiles reserviert.
Alle weiteren Tiles bauen darauf auf, man geht durch das Tileset von links nach rechts, dann von oben nach unten, immer 8 tiles in einer Zeile.
Als Beispiel:
$game_map.set_map_data(3,2,0,412)
Wenn du diesen Code als Custom-Script bei einem Event einfügst dann wird das Tile an der Stelle 3/2, also das vierte Tile von links und das dritte Tile von oben, im untersten Layer auf die terrain_id 412 gesetzt. Davon 383 abgezogen bedeutet 29, dann zählen wir von unserem ersten nicht-Autotile im Tileset 29 plätze nach vorne und kommen zu exakt dem Tile welches nun an die beschriebene Stelle gesetzt wird.
Das funktioniert leider nicht für Autotiles, das bedeutet, du kannst zwar die ID's unterhalb von 384 verwenden und es wird das entsprechende Sub-Tile des Autotiles an die Stelle gesetzt, es wird allerdings nicht animiert werden.
Ich hoffe das war verständlich genug soweit. Falls es noch Probleme geben sollte einfach fragen.
UhuSchuhu
09.11.2011, 11:26
Nein, keine Fragen mehr, super erklärt und funktioniert einwandfrei. Danke!
Hey, ich muss leider das SDK in mein Projekt einbauen , seit ich das getan habe funktioniert diese Methode nicht mehr. Kann mir da jmd. helfen?
Powered by vBulletin® Version 4.2.3 Copyright ©2025 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.