Corrected formspecs.md
This commit is contained in:
parent
178e5046ec
commit
b3d2b64295
@ -23,14 +23,14 @@ submit_vuln:
|
||||
</figcaption>
|
||||
</figure>
|
||||
|
||||
In diesem Kapitel werden wir lernen, wie man einen formspec erstellt und ihn dem Benutzer anzeigt.
|
||||
Ein formspec ist der Spezifikationscode für ein Form.
|
||||
In diesem Kapitel werden wir lernen, wie man einen Formspec erstellt und ihn dem Benutzer anzeigt.
|
||||
Ein Formspec ist der Spezifikationscode für ein Form.
|
||||
In Minetest sind Forms Fenster wie das Spielerinventar und können eine
|
||||
eine Vielzahl von Elementen wie Beschriftungen, Schaltflächen und Felder enthalten.
|
||||
|
||||
Beachten Sie, dass Sie, wenn Sie keine Benutzereingaben benötigen, zum Beispiel wenn Sie nur
|
||||
Informationen für den Spieler bereitstellen möchten, Sie die Verwendung von
|
||||
[Heads Up Display (HUD)](hud.html)-Elemente anstelle von Formularen verwenden sollten, da
|
||||
[Heads Up Display (HUD)](hud.html)-Elementen anstelle von Formspecs verwenden sollten, da
|
||||
unerwartete Fenster das Spielgeschehen stören können.
|
||||
|
||||
- [Reale oder Legacy-Koordinaten](#reale-oder-legacy-koordinaten)
|
||||
@ -49,11 +49,11 @@ unerwartete Fenster das Spielgeschehen stören können.
|
||||
|
||||
## Reale oder Legacy-Koordinaten
|
||||
|
||||
In älteren Versionen von Minetest waren die formspecs inkonsistent. Die Art und Weise, wie verschiedene
|
||||
Elemente auf unerwartete Art und Weise positioniert wurden; es war schwierig, die
|
||||
Platzierung der Elemente vorherzusagen und auszurichten. Minetest 5.1.0 enthält eine Funktion
|
||||
In älteren Versionen von Minetest waren die Formspecs inkonsistent. Wegen der Art und Weise, wie verschiedene
|
||||
Elemente auf unerwartete Art und Weise positioniert wurden war es schwierig, die
|
||||
Platzierung der Elemente vorherzusagen und auszurichten. Minetest 5.1.0 enthält eine Funktion namens
|
||||
Koordinaten, die dieses Problem durch die Einführung eines konsistenten
|
||||
Koordinatensystem. Die Verwendung von realen Koordinaten wird dringend empfohlen, und deshalb
|
||||
Koordinatensystem beheben. Die Verwendung von realen Koordinaten wird dringend empfohlen, und deshalb
|
||||
dieses Kapitel ausschließlich diese verwenden.
|
||||
|
||||
Die Verwendung einer formspec_version von 2 oder höher aktiviert reale Koordinaten.
|
||||
@ -75,37 +75,37 @@ Sie besteht aus einer Reihe von Elementen mit der folgenden Form:
|
||||
bo[param1]
|
||||
|
||||
|
||||
Elemente sind Elemente wie Textfelder oder Schaltflächen oder können Metadaten sein wie
|
||||
wie Größe oder Hintergrund sein. Sie sollten nachschlagen in der
|
||||
[lua_api.txt](https://minetest.gitlab.io/minetest/formspec/)
|
||||
Elemente sind Elemente wie Textfelder oder Schaltflächen oder können Metadaten wie Größe
|
||||
oder Hintergrund sein. Sie sollten nachschlagen in der
|
||||
[lua_api.txt 🇬🇧](https://minetest.gitlab.io/minetest/formspec/)
|
||||
für eine Liste aller möglichen Elemente.
|
||||
|
||||
|
||||
### Header
|
||||
|
||||
Der Header eines formspec enthält Informationen, die zuerst erscheinen müssen. Diese
|
||||
umfasst die Größe des formspec, die Position, den Anker und ob das
|
||||
Der Header eines Formspec enthält Informationen, die zuerst erscheinen müssen. Diese
|
||||
umfasst die Größe des Formspec, die Position, den Anker und ob das
|
||||
spielweite Thema angewendet werden soll.
|
||||
|
||||
Die Elemente im Header müssen in einer bestimmten Reihenfolge definiert werden, sonst
|
||||
wird ein Fehler angezeigt. Diese Reihenfolge ist im obigen Absatz angegeben und, wie immer,
|
||||
wird ein Fehler angezeigt. Diese Reihenfolge ist im obigen Absatz angegeben und - wie immer -
|
||||
in der Lua-API-Referenz dokumentiert.
|
||||
|
||||
Die Größe wird in formspec-Slots angegeben - eine Maßeinheit, die ungefähr
|
||||
etwa 64 Pixel entspricht, jedoch abhängig von der Bildschirmdichte und den Skalierungs
|
||||
Die Größe wird in Formspec-Slots angegeben - eine Maßeinheit, die etwa
|
||||
64 Pixeln entspricht, jedoch abhängig von der Bildschirmdichte und den Skalierungs
|
||||
Einstellungen des Clients ist. Hier ist ein formspec mit der Größe "2,2":
|
||||
|
||||
formspec_version[4]
|
||||
size[2,2]
|
||||
|
||||
Beachten Sie, dass wir die formspec-Sprachversion ausdrücklich definiert haben müssen.
|
||||
Beachten Sie, dass wir die Formspec-Sprachversion ausdrücklich definiert haben müssen.
|
||||
Ohne dies wird stattdessen das Altsystem verwendet - was
|
||||
die Verwendung der konsistenten Elementpositionierung und anderer neuer Funktionen verhindert.
|
||||
|
||||
Die Elemente position und Anker werden verwendet, um das formspec auf dem Bildschirm zu platzieren.
|
||||
Die Elemente position und anchor werden verwendet, um das Formspec auf dem Bildschirm zu platzieren.
|
||||
Die Position legt fest, wo auf dem Bildschirm das formspec sein wird, und ist standardmäßig auf
|
||||
die Mitte (`0,5,0,5`). Der Anker legt fest, wo auf dem formspec die Position ist,
|
||||
so dass Sie das formspec mit dem Rand des Bildschirms ausrichten können. Das formspec
|
||||
so dass Sie das Formspec mit dem Rand des Bildschirms ausrichten können. Das Formspec
|
||||
kann auf diese Weise links vom Bildschirm platziert werden:
|
||||
|
||||
formspec_version[4]
|
||||
@ -113,7 +113,7 @@ kann auf diese Weise links vom Bildschirm platziert werden:
|
||||
position[0,0.5]
|
||||
anchor[0,0.5]
|
||||
|
||||
Dadurch wird der Anker an den linken mittleren Rand des formspec-Feldes gesetzt, und die
|
||||
Dadurch wird der Anker an den linken mittleren Rand des Formspec-Feldes gesetzt, und die
|
||||
Position dieses Ankers auf der linken Seite des Bildschirms.
|
||||
|
||||
|
||||
@ -127,11 +127,11 @@ Position dieses Ankers auf der linken Seite des Bildschirms.
|
||||
</figure>
|
||||
|
||||
Der beste Weg, etwas zu lernen, ist, etwas zu machen, also lasst uns ein Ratespiel machen.
|
||||
Das Prinzip ist einfach: Der Mod entscheidet sich für eine Zahl, und die Spieler
|
||||
errät die Zahl. Der Mod sagt dann, ob die erratene Zahl höher oder niedriger ist als
|
||||
Das Prinzip ist einfach: Die Mod entscheidet sich für eine Zahl, und der Spieler
|
||||
errät die Zahl. Die Mod sagt dann, ob die erratene Zahl höher oder niedriger ist als
|
||||
die tatsächliche Zahl.
|
||||
|
||||
Zunächst erstellen wir eine Funktion, die den formspec-Code erzeugt. Es ist gute Praxis, dies
|
||||
Zunächst erstellen wir eine Funktion, die den Formspec-Code erzeugt. Es ist gute Praxis, dies
|
||||
zu tun, da es die Wiederverwendung an anderer Stelle erleichtert.
|
||||
|
||||
<div style="clear: both;"></div>
|
||||
@ -157,11 +157,11 @@ end
|
||||
```
|
||||
|
||||
Im obigen Code platzieren wir ein Feld, eine Beschriftung und eine Schaltfläche.
|
||||
Ein Feld erlaubt die Eingabe von Text Texteingabe, und eine Schaltfläche dient zum
|
||||
Ein Feld erlaubt die Eingabe von Text und eine Schaltfläche dient zum
|
||||
Absenden des Forms. Sie werden feststellen, dass die Elemente
|
||||
sorgfältig positioniert sind, um Padding und Abstände hinzuzufügen, was später erklärt wird.
|
||||
|
||||
Als Nächstes wollen wir dem Spieler erlauben, den formspec anzuzeigen. Der beste Weg, dies zu tun
|
||||
Als Nächstes wollen wir dem Spieler erlauben, den Formspec anzuzeigen. Der beste Weg, dies zu tun
|
||||
ist die Verwendung von `show_formspec`:
|
||||
|
||||
```lua
|
||||
@ -176,8 +176,8 @@ minetest.register_chatcommand("game", {
|
||||
})
|
||||
```
|
||||
|
||||
Die Funktion `show_formspec` akzeptiert einen Spielernamen, den Namen der formspec und die
|
||||
formspec selbst. Der formspec-Name sollte ein gültiger Itemname sein, d.h. im Format
|
||||
Die Funktion `show_formspec` akzeptiert einen Spielernamen, den Namen der Formspec und den
|
||||
Formspec selbst. Der Formspec-Name sollte ein gültiger Itemname sein, d.h. im Format
|
||||
`Modname:Gegenstandsname`.
|
||||
|
||||
|
||||
@ -190,7 +190,7 @@ formspec selbst. Der formspec-Name sollte ein gültiger Itemname sein, d.h. im F
|
||||
</figcaption>
|
||||
</figure>
|
||||
|
||||
Padding ist der Abstand zwischen dem Rand des formspec und seinem Inhalt oder zwischen nicht verwandten Elementen,
|
||||
Padding ist der Abstand zwischen dem Rand des Formspec und seinem Inhalt oder zwischen nicht verwandten Elementen,
|
||||
dargestellt in Rot. Abstand ist der Abstand zwischen zusammenhängenden Elementen, der blau dargestellt wird.
|
||||
|
||||
|
||||
@ -202,7 +202,7 @@ Ein Padding von `0,375` und ein Abstand von `0,25` sind üblich.
|
||||
### Empfang von Formspec-Übermittlungen
|
||||
|
||||
Wenn `show_formspec` aufgerufen wird, wird der formspec an den Client gesendet, um angezeigt zu werden.
|
||||
Damit formspecs nützlich sind, müssen Informationen vom Client zum Server zurückgeschickt werden.
|
||||
Damit Formspecs nützlich sind, müssen Informationen vom Client zum Server zurückgeschickt werden.
|
||||
Die Methode dafür heißt formspec field submission, und für `show_formspec` wird diese
|
||||
Übermittlung über einen globalen Callback empfangen:
|
||||
|
||||
@ -220,7 +220,7 @@ end)
|
||||
```
|
||||
|
||||
Die in `minetest.register_on_player_receive_fields` angegebene Funktion wird
|
||||
jedes Mal aufgerufen, wenn ein Benutzer ein Formular absendet. Die meisten Callbacks müssen den der Funktion übergebenen Formularnamen prüfen
|
||||
jedes Mal aufgerufen, wenn ein Benutzer ein Formular absendet. Die meisten Callbacks müssen den
|
||||
an die Funktion übergebenen Formularnamen überprüfen und beenden, wenn es sich nicht um das richtige Form handelt; einige
|
||||
müssen jedoch möglicherweise für mehrere Formulare oder für alle Formulare funktionieren.
|
||||
|
||||
@ -290,8 +290,8 @@ function guessing.get_formspec(name, context)
|
||||
end
|
||||
```
|
||||
|
||||
Beachten Sie, dass es gute Praxis ist, wenn `get_formspec` den Context nur liest und nicht
|
||||
überhaupt nicht zu aktualisieren. Dies kann die Funktion einfacher machen, und auch leichter zu testen.
|
||||
Beachten Sie, dass es gute Praxis ist, wenn `get_formspec` den Context nur liest und
|
||||
überhaupt nicht zu aktualisiert. Dies kann die Funktion einfacher machen, und auch leichter zu testen.
|
||||
|
||||
Und schließlich müssen wir den Handler aktualisieren, um den Context mit der Vermutung zu aktualisieren:
|
||||
|
||||
@ -307,23 +307,23 @@ end
|
||||
|
||||
## Formspec-Quellen
|
||||
|
||||
Es gibt drei verschiedene Möglichkeiten, wie ein Formspec an den client übermittelt werden kann:
|
||||
Es gibt drei verschiedene Möglichkeiten, wie ein Formspec an den Client übermittelt werden kann:
|
||||
|
||||
* [show_formspec](#ratespiel): Bei der oben beschriebenen Methode werden die Felder durch
|
||||
`register_on_player_receive_fields` empfangen.
|
||||
* [Node Meta Formspecs](#node-meta-formspecs): der Node enthält in seinen Metadaten eine Formularvorgabe,
|
||||
und der Client zeigt es *sofort* an, wenn der Spieler mit der rechten Maustaste klickt. Felder werden
|
||||
durch eine Methode in der Node-Definition namens `on_receive_fields` empfangen.
|
||||
* [Player Inventory Formspecs](#spieler-inventar-formspecs): der formspec wird irgendwann an den Client gesendet und dann
|
||||
sofort angezeigt, wenn der Spieler auf "i" drückt. Felder werden empfangen durch
|
||||
* [Player Inventory Formspecs](#spieler-inventar-formspecs): der Formspec wird irgendwann an den Client gesendet und dann
|
||||
sofort angezeigt, wenn der Spieler auf "i" drückt. Felder werden durch
|
||||
`register_on_player_receive_fields` empfangen.
|
||||
|
||||
### Node Meta Formspecs
|
||||
|
||||
`minetest.show_formspec` ist nicht die einzige Möglichkeit, einen formspec anzuzeigen; Sie können auch
|
||||
formspecs zu den Metadaten eines [Nodes](node_metadata.html) hinzufügen. Zum Beispiel,
|
||||
`minetest.show_formspec` ist nicht die einzige Möglichkeit, einen Formspec anzuzeigen; Sie können auch
|
||||
Formspecs zu den Metadaten eines [Nodes](node_metadata.html) hinzufügen. Zum Beispiel,
|
||||
wird dieses bei Truhen verwendet, um ein schnelleres Öffnen zu ermöglichen -
|
||||
man muss nicht darauf warten, dass der Server dem Spieler den formspec für die Truhe schickt.
|
||||
man muss nicht darauf warten, dass der Server dem Spieler den Formspec für die Truhe schickt.
|
||||
|
||||
```lua
|
||||
minetest.register_node("meinemod:rechtsclick", {
|
||||
@ -352,25 +352,24 @@ minetest.register_node("meinemod:rechtsclick", {
|
||||
})
|
||||
```
|
||||
|
||||
Auf diese Weise eingestellte formspecs lösen nicht denselben Callback aus. Um
|
||||
Auf diese Weise eingestellte Formspecs lösen nicht denselben Callback aus. Um
|
||||
Formulareingaben für meta formspecs zu erhalten, müssen Sie einen
|
||||
`on_receive_fields`-Eintrag bei der Registrierung des Nodes enthalten.
|
||||
|
||||
Diese Art von Callback wird ausgelöst, wenn Sie die Eingabetaste
|
||||
in einem Feld drücken, was mit `minetest.show_formspec` unmöglich ist;
|
||||
allerdings kann diese Art von Formular nur durch Rechtsklick auf einen
|
||||
Node. Sie kann nicht programmatisch ausgelöst werden.
|
||||
diese Art von Formular kann jedoch nur durch Rechtsklick auf einen Knoten angezeigt werden. Sie kann nicht programmatisch ausgelöst werden.
|
||||
|
||||
### Spieler Inventar Formspecs
|
||||
|
||||
Der formspec für das Spielerinventar wird angezeigt, wenn der Spieler auf i drückt.
|
||||
Der globale Callback wird verwendet, um Ereignisse von diesem formspec zu empfangen, und der
|
||||
Der Formspec für das Spielerinventar wird angezeigt, wenn der Spieler auf i drückt.
|
||||
Der globale Callback wird verwendet, um Ereignisse von diesem Formspec zu empfangen, und der
|
||||
formname ist `""`.
|
||||
|
||||
Es gibt eine Reihe von verschiedenen Mods, die es ermöglichen, das
|
||||
das Spielerinventar anzupassen. Die offiziell empfohlene Mod ist
|
||||
[Simple Fast Inventory (sfinv)](https://github.com/rubenwardy/sfinv/blob/master/Tutorial.md),
|
||||
und ist in Minetest Game enthalten. Ich als Übersetzer emphele jedoch
|
||||
und ist in Minetest Game enthalten. Ich als Übersetzer empfehle jedoch
|
||||
eher [i3](https://github.com/minetest-mods/i3) oder [unified inventory](https://github.com/minetest-mods/unified_inventory)
|
||||
|
||||
|
||||
@ -378,6 +377,6 @@ eher [i3](https://github.com/minetest-mods/i3) oder [unified inventory](https://
|
||||
|
||||
* Erweitern Sie das Ratespiel, um die höchste Punktzahl jedes Spielers zu ermitteln, wobei
|
||||
die höchste Punktzahl angibt, wie viele Ratschläge nötig waren.
|
||||
* Erstellen Sie einen Node namens "Inbox", in dem Benutzer ein formspec öffnen und Nachrichten hinterlassen können.
|
||||
* Erstellen Sie einen Node namens "Inbox", in dem Benutzer ein Formspec öffnen und Nachrichten hinterlassen können.
|
||||
Dieser Node sollte den Namen des Placers als `owner` in der Meta speichern, und sollte
|
||||
`show_formspec` verwenden, um verschiedene formspecs für verschiedene Spieler anzuzeigen.
|
||||
`show_formspec` verwenden, um verschiedene Formspecs für verschiedene Spieler anzuzeigen.
|
||||
|
Loading…
Reference in New Issue
Block a user