Corrected formspecs.md
This commit is contained in:
parent
178e5046ec
commit
b3d2b64295
@ -23,14 +23,14 @@ submit_vuln:
|
|||||||
</figcaption>
|
</figcaption>
|
||||||
</figure>
|
</figure>
|
||||||
|
|
||||||
In diesem Kapitel werden wir lernen, wie man einen formspec erstellt und ihn dem Benutzer anzeigt.
|
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.
|
Ein Formspec ist der Spezifikationscode für ein Form.
|
||||||
In Minetest sind Forms Fenster wie das Spielerinventar und können eine
|
In Minetest sind Forms Fenster wie das Spielerinventar und können eine
|
||||||
eine Vielzahl von Elementen wie Beschriftungen, Schaltflächen und Felder enthalten.
|
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
|
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
|
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.
|
unerwartete Fenster das Spielgeschehen stören können.
|
||||||
|
|
||||||
- [Reale oder Legacy-Koordinaten](#reale-oder-legacy-koordinaten)
|
- [Reale oder Legacy-Koordinaten](#reale-oder-legacy-koordinaten)
|
||||||
@ -49,11 +49,11 @@ unerwartete Fenster das Spielgeschehen stören können.
|
|||||||
|
|
||||||
## Reale oder Legacy-Koordinaten
|
## Reale oder Legacy-Koordinaten
|
||||||
|
|
||||||
In älteren Versionen von Minetest waren die formspecs inkonsistent. Die Art und Weise, wie verschiedene
|
In älteren Versionen von Minetest waren die Formspecs inkonsistent. Wegen der Art und Weise, wie verschiedene
|
||||||
Elemente auf unerwartete Art und Weise positioniert wurden; es war schwierig, die
|
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
|
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
|
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.
|
dieses Kapitel ausschließlich diese verwenden.
|
||||||
|
|
||||||
Die Verwendung einer formspec_version von 2 oder höher aktiviert reale Koordinaten.
|
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]
|
bo[param1]
|
||||||
|
|
||||||
|
|
||||||
Elemente sind Elemente wie Textfelder oder Schaltflächen oder können Metadaten sein wie
|
Elemente sind Elemente wie Textfelder oder Schaltflächen oder können Metadaten wie Größe
|
||||||
wie Größe oder Hintergrund sein. Sie sollten nachschlagen in der
|
oder Hintergrund sein. Sie sollten nachschlagen in der
|
||||||
[lua_api.txt](https://minetest.gitlab.io/minetest/formspec/)
|
[lua_api.txt 🇬🇧](https://minetest.gitlab.io/minetest/formspec/)
|
||||||
für eine Liste aller möglichen Elemente.
|
für eine Liste aller möglichen Elemente.
|
||||||
|
|
||||||
|
|
||||||
### Header
|
### Header
|
||||||
|
|
||||||
Der Header eines formspec enthält Informationen, die zuerst erscheinen müssen. Diese
|
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
|
umfasst die Größe des Formspec, die Position, den Anker und ob das
|
||||||
spielweite Thema angewendet werden soll.
|
spielweite Thema angewendet werden soll.
|
||||||
|
|
||||||
Die Elemente im Header müssen in einer bestimmten Reihenfolge definiert werden, sonst
|
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.
|
in der Lua-API-Referenz dokumentiert.
|
||||||
|
|
||||||
Die Größe wird in formspec-Slots angegeben - eine Maßeinheit, die ungefähr
|
Die Größe wird in Formspec-Slots angegeben - eine Maßeinheit, die etwa
|
||||||
etwa 64 Pixel entspricht, jedoch abhängig von der Bildschirmdichte und den Skalierungs
|
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":
|
Einstellungen des Clients ist. Hier ist ein formspec mit der Größe "2,2":
|
||||||
|
|
||||||
formspec_version[4]
|
formspec_version[4]
|
||||||
size[2,2]
|
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
|
Ohne dies wird stattdessen das Altsystem verwendet - was
|
||||||
die Verwendung der konsistenten Elementpositionierung und anderer neuer Funktionen verhindert.
|
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 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,
|
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:
|
kann auf diese Weise links vom Bildschirm platziert werden:
|
||||||
|
|
||||||
formspec_version[4]
|
formspec_version[4]
|
||||||
@ -113,7 +113,7 @@ kann auf diese Weise links vom Bildschirm platziert werden:
|
|||||||
position[0,0.5]
|
position[0,0.5]
|
||||||
anchor[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.
|
Position dieses Ankers auf der linken Seite des Bildschirms.
|
||||||
|
|
||||||
|
|
||||||
@ -127,11 +127,11 @@ Position dieses Ankers auf der linken Seite des Bildschirms.
|
|||||||
</figure>
|
</figure>
|
||||||
|
|
||||||
Der beste Weg, etwas zu lernen, ist, etwas zu machen, also lasst uns ein Ratespiel machen.
|
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
|
Das Prinzip ist einfach: Die Mod entscheidet sich für eine Zahl, und der Spieler
|
||||||
errät die Zahl. Der Mod sagt dann, ob die erratene Zahl höher oder niedriger ist als
|
errät die Zahl. Die Mod sagt dann, ob die erratene Zahl höher oder niedriger ist als
|
||||||
die tatsächliche Zahl.
|
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.
|
zu tun, da es die Wiederverwendung an anderer Stelle erleichtert.
|
||||||
|
|
||||||
<div style="clear: both;"></div>
|
<div style="clear: both;"></div>
|
||||||
@ -157,11 +157,11 @@ end
|
|||||||
```
|
```
|
||||||
|
|
||||||
Im obigen Code platzieren wir ein Feld, eine Beschriftung und eine Schaltfläche.
|
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
|
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.
|
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`:
|
ist die Verwendung von `show_formspec`:
|
||||||
|
|
||||||
```lua
|
```lua
|
||||||
@ -176,8 +176,8 @@ minetest.register_chatcommand("game", {
|
|||||||
})
|
})
|
||||||
```
|
```
|
||||||
|
|
||||||
Die Funktion `show_formspec` akzeptiert einen Spielernamen, den Namen der formspec und die
|
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
|
Formspec selbst. Der Formspec-Name sollte ein gültiger Itemname sein, d.h. im Format
|
||||||
`Modname:Gegenstandsname`.
|
`Modname:Gegenstandsname`.
|
||||||
|
|
||||||
|
|
||||||
@ -190,7 +190,7 @@ formspec selbst. Der formspec-Name sollte ein gültiger Itemname sein, d.h. im F
|
|||||||
</figcaption>
|
</figcaption>
|
||||||
</figure>
|
</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.
|
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
|
### Empfang von Formspec-Übermittlungen
|
||||||
|
|
||||||
Wenn `show_formspec` aufgerufen wird, wird der formspec an den Client gesendet, um angezeigt zu werden.
|
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
|
Die Methode dafür heißt formspec field submission, und für `show_formspec` wird diese
|
||||||
Übermittlung über einen globalen Callback empfangen:
|
Übermittlung über einen globalen Callback empfangen:
|
||||||
|
|
||||||
@ -220,7 +220,7 @@ end)
|
|||||||
```
|
```
|
||||||
|
|
||||||
Die in `minetest.register_on_player_receive_fields` angegebene Funktion wird
|
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
|
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.
|
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
|
end
|
||||||
```
|
```
|
||||||
|
|
||||||
Beachten Sie, dass es gute Praxis ist, wenn `get_formspec` den Context nur liest und nicht
|
Beachten Sie, dass es gute Praxis ist, wenn `get_formspec` den Context nur liest und
|
||||||
überhaupt nicht zu aktualisieren. Dies kann die Funktion einfacher machen, und auch leichter zu testen.
|
ü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:
|
Und schließlich müssen wir den Handler aktualisieren, um den Context mit der Vermutung zu aktualisieren:
|
||||||
|
|
||||||
@ -307,23 +307,23 @@ end
|
|||||||
|
|
||||||
## Formspec-Quellen
|
## 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
|
* [show_formspec](#ratespiel): Bei der oben beschriebenen Methode werden die Felder durch
|
||||||
`register_on_player_receive_fields` empfangen.
|
`register_on_player_receive_fields` empfangen.
|
||||||
* [Node Meta Formspecs](#node-meta-formspecs): der Node enthält in seinen Metadaten eine Formularvorgabe,
|
* [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
|
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.
|
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
|
* [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
|
sofort angezeigt, wenn der Spieler auf "i" drückt. Felder werden durch
|
||||||
`register_on_player_receive_fields` empfangen.
|
`register_on_player_receive_fields` empfangen.
|
||||||
|
|
||||||
### Node Meta Formspecs
|
### Node Meta Formspecs
|
||||||
|
|
||||||
`minetest.show_formspec` ist nicht die einzige Möglichkeit, einen formspec anzuzeigen; Sie können auch
|
`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,
|
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 -
|
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
|
```lua
|
||||||
minetest.register_node("meinemod:rechtsclick", {
|
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
|
Formulareingaben für meta formspecs zu erhalten, müssen Sie einen
|
||||||
`on_receive_fields`-Eintrag bei der Registrierung des Nodes enthalten.
|
`on_receive_fields`-Eintrag bei der Registrierung des Nodes enthalten.
|
||||||
|
|
||||||
Diese Art von Callback wird ausgelöst, wenn Sie die Eingabetaste
|
Diese Art von Callback wird ausgelöst, wenn Sie die Eingabetaste
|
||||||
in einem Feld drücken, was mit `minetest.show_formspec` unmöglich ist;
|
in einem Feld drücken, was mit `minetest.show_formspec` unmöglich ist;
|
||||||
allerdings kann diese Art von Formular nur durch Rechtsklick auf einen
|
diese Art von Formular kann jedoch nur durch Rechtsklick auf einen Knoten angezeigt werden. Sie kann nicht programmatisch ausgelöst werden.
|
||||||
Node. Sie kann nicht programmatisch ausgelöst werden.
|
|
||||||
|
|
||||||
### Spieler Inventar Formspecs
|
### Spieler Inventar Formspecs
|
||||||
|
|
||||||
Der formspec für das Spielerinventar wird angezeigt, wenn der Spieler auf i drückt.
|
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 globale Callback wird verwendet, um Ereignisse von diesem Formspec zu empfangen, und der
|
||||||
formname ist `""`.
|
formname ist `""`.
|
||||||
|
|
||||||
Es gibt eine Reihe von verschiedenen Mods, die es ermöglichen, das
|
Es gibt eine Reihe von verschiedenen Mods, die es ermöglichen, das
|
||||||
das Spielerinventar anzupassen. Die offiziell empfohlene Mod ist
|
das Spielerinventar anzupassen. Die offiziell empfohlene Mod ist
|
||||||
[Simple Fast Inventory (sfinv)](https://github.com/rubenwardy/sfinv/blob/master/Tutorial.md),
|
[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)
|
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
|
* 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.
|
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
|
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