Persönliche Werkzeuge |
Structs im GUIAus Starcraft II Map-Editor WikiTutorials > Tutorials zum Auslöser-Editor > Structs im GUI
VorwortIn diesem Tutorial zeige ich euch, wie Structs (welche aus der Programmiersprache C stammen) im GUI funktionieren und wie ihr diese benutzen könnt.
Was ist eigentlich ein Struct?Ein Struct ist sozusagen eine Variable, welche verschiedene Variablen enthält. Dies kann man sich zB wie einen Ordner bei eurem Desktop oder so vorstellen. Hier ist der Ordner der Struct und die beinhaltenden Dateien sind die Struct-Member. Wozu eignet sich in GUI überhaupt ein Struct?Für mich selbst machen Structs Sinn, da diese zwar nicht als Parameter übergeben werden können, man diese aber Global machen kann und sie z.B. als eine Globale Variable (mit Array) speichern kann und so an eine Art objektbasierte Syntax kommen.
Wie erzeuge ich einen Struct?Zuerst sollte man wissen, dass Structs im GUI nicht Struct heißen, sondern sie sind unter dem Namen "Record" zu finden. Um einen Record-Typ zu erstellen, öffnen wir zuerst einmal den Trigger-Editor und drücken STRG + U. Nun solltet ihr links in der Tabelle einen neuen Gegenstand haben, der "Untitled Record 001" heißen sollte. Ihr könnt ihn auch an der braunen Truhe als Bild erkennen. Nun habt ihr euren ersten Record erstellt. Dieser hat jedoch noch keine Variablen.
MyStruct
StructTest
Der Einsatz von RecordsIch selber würde Structs für größere Sachen benutzen, wie z.B einen Dialog oder ähnliches. In diesem könnt ihr dann den Dialog und die ganzen benötigten DialogButtons speichern und so einfacher auf diese zugreifen. Bei einem Dialog eignet es sich dann auch, den Struct einmalig als eine globale Variable zu deklarieren. Ihr könnt den Struct jedoch auch als normale, lokale Variable benutzen, um z.B. die Positionen einer Einheit zu speichern. Dies würde einem das erzeugen von 3 Variablen (X, Y, Z) wegnehmen und es übersichtlicher machen.
Records als globale VariableUm einen Record als globale Variable zu deklaieren, erstellt ihr erstmal wie gewohnt eine globale Variable und gebt dieser einen Namen. Nun wählt ihr diese an und sucht bei "Type:" den Namen "- Record" raus (das "-" muss dabei sein). Wenn ihr dies getan habt, wählt ihr unter dem Dialog euren Record-Typ aus und fügt diesem bei Bedarf einen Array hinzu. Records können nicht constant sein und können keinen Startwert haben! Nun habt ihr eine globale Variable eures Records erzeugt, welche ihr nun benutzen könnt. Records als lokale VariableUm einen Record als lokale Variable zu deklarieren, müsst ihr einfach eine lokale Variable erzeugen und wie bei einer globalen den Typ "-Record" auswählen und euren Record. Diesen könnt ihr dann wieder als Array angeben. Das ganze sollte dann so aussehen: StructLocalTest
Setzen von Variablen eines RecordsUm die Variablen einen Records (auch bekannt unter "Member") zu ändern, macht ihr nichts anderes, als wenn ihr einer anderen Variable einen Wert zuordnen wollt. Ihr wählt die richtige Funktion dafür aus und nimmt als Variable euren lokalen oder globalen Record. Hier gibt es nur einen Unterschied: Im Gegensatz zu normalen Variablen müsst ihr hier zusätzlich einen Member auswählen: Variable - Set MyStruct.Member = Value Der Member entspricht einfach der Variable innerhalb des Records, welche ihr ändern möchtet. Das Selbe gilt auch für das Lesen bzw. das Benutzen eines Records. Zerstören/Recyclen von RecordsDa lokale Records wie normale Variablen (Integer, String, Real usw.) behandelt werden, ist es nicht nötig, diese manuell zu zerstören oder zu recyclen, das macht Sc2 von alleine. Anders sieht dies jedoch mit den globalen Records aus. Diese bleiben das ganze Spiel über vorhanden und können auch nicht zerstört bzw recycled werden, was auch keinen wirklichen Sinn machen würde. Was man über Records wissen sollteDie Structs, welche hier als Records bekannt sind, sind NICHT die, die viele ehemalige oder aktive Wc3-Mapper aus vJass kennen. Die Structs, welche man aus vJass kennt, sind eher ganze Klassen und sollten nicht mit den Structs aus Galaxy verglichen werden. Die Struct in Galaxy sind nur dafür gedacht, normale Variablen zu sein und sie können auch nicht irgendwelche Interfaces oder andere Structs extenden! Solltet ihr an sowas interessiert sein, solltet ihr euch mal Andromeda von geX anschauen. Außerdem solltet ihr euch bei dem benutzen dieser Structs bewusst sein, dass diese WEDER als Parameter in Funktionen NOCH als Rückgabewert angegeben werden können. BeispielZuletzt hab ich noch ein kleines Beispiel eines kurzen Einsatzes eines lokalen Records gemacht:
Der Record:Vector Unit Position abfragen:GetUnitPosition Dies würde euch jedes mal wenn ihr F5 drückt die Position eurer TestUnit anzeigen.
Ich hoffe, dieses Tutorial hat euch ein wenig weiter geholfen und euch gezeigt, wie man Structs im GUI benutzen kann. --Kricz 22:58, 9. Mai 2010 (UTC) |