Godot-Signale: Kopplung verringern und Lebensdauer von Verbindungen explizit halten

Maschinelle Übersetzung des Originals (English, Revision 1); massgebend ist das Original. Original

article · de · Wissensstand 2026-10-11 · geändert , Revision 1 · unreviewed

Themen: game-development godot signals software-design

Signale eignen sich für beobachtbare Ereignisse, direkte Aufrufe für Operationen im eigenen Zuständigkeitsbereich. Für wiederverwendbare oder temporäre Szenenobjekte braucht es bewusste Abonnementregeln.

Inhalt
  1. Die passende Beziehung wählen
  2. Signale melden Ereignisse
  3. Verbindungen haben eine Lebensdauer
  4. Beispiel: ein Bedienpanel für eine Luftschleuse
  5. Grenzen und Überprüfung
  6. Sources
  7. Geltungsbereich und Grundlage
  8. Quellen
  9. Zuschreibung und Lizenz
  10. Maschinenzugriff

Die passende Beziehung wählen

Dass sich eine Tür öffnet, und die Anfrage, eine Tür zu öffnen, sind zwei verschiedene Interaktionen. Die Anfrage braucht einen verantwortlichen Empfänger, der sie annehmen oder ablehnen kann. Das abgeschlossene Öffnen kann dagegen Sound, Missionsziele und Oberflächencode unabhängig voneinander interessieren. Diese Beziehungen sind zu unterscheiden, bevor ein Kommunikationsmechanismus gewählt wird. So bleibt die Funktion leichter nachvollziehbar, wenn ein anderes System sie später beobachten soll.

Signale melden Ereignisse

Mit Godot-Signalen können Objekte auf Änderungen reagieren, ohne dass der Sender jeden Empfänger kennen muss. [1] Ein Signal dient dazu, eine abgeschlossene Zustandsänderung bekanntzugeben, und zwar mit genügend Kontext, damit Listener sie einordnen können. Ein direkter Methodenaufruf ist vorzuziehen, wenn der Aufrufer das Ziel bereits besitzt und sofort ein Ergebnis braucht. Keiner der beiden Mechanismen ersetzt einen klaren Vertrag darüber, wann sich der Zustand ändert.

Verbindungen haben eine Lebensdauer

Eine normale Signalverbindung zu einem Callable geht verloren, sobald das Objekt dieses Callables freigegeben wird. Mit is_connected() lässt sich prüfen, ob eine Verbindung besteht, bevor verbunden oder getrennt wird. [2] Ein Panel auszublenden oder vorübergehend aus der aktiven Nutzung zu nehmen, bedeutet nicht, dass es freigegeben wird. Es muss festgelegt werden, ob das Abonnement während der gesamten Lebensdauer des Objekts besteht oder nur, solange das Panel an der Funktion beteiligt ist.

Beispiel: ein Bedienpanel für eine Luftschleuse

Angenommen, ein Panel fordert das Öffnen einer Luftschleuse über eine direkte Methode an. Die Luftschleuse prüft ihre Verriegelungen, aktualisiert ihren Zustand und sendet airlock_opened erst, nachdem sie sich tatsächlich geöffnet hat. Ein Sound-Listener und ein Missions-Listener abonnieren das Signal unabhängig voneinander. Ein temporäres Statuspanel abonniert es, solange es angezeigt wird, liest einen anfänglichen Zustands-Snapshot und trennt die Verbindung, wenn sein Beobachtungszeitraum endet. Wird das Panel erneut geöffnet, soll genau ein aktives Abonnement bestehen und nicht eine weitere Schicht von Callbacks hinzukommen. Öffnet sich die Luftschleuse, während das Panel nicht aktiv ist, zeigt der Snapshot bei der Rückkehr den korrekten Zustand; eine Wiedergabe aller früheren Signale ist nicht nötig.

Grenzen und Überprüfung

Signale sind Benachrichtigungen, keine automatische Ereignishistorie und kein Eigentumssystem. Operationen, bei denen die Reihenfolge zählt, gehören unter einen expliziten Koordinator, statt darauf zu vertrauen, dass voneinander unabhängige Listener zufällig in passender Abfolge laufen. In C# gibt es für erfasste Lambdas und für benutzerdefinierte Signale, die mit += verbunden werden, Ausnahmen bei der automatischen Trennung; die dokumentierten Aufräumregeln sind zu befolgen. [3] Getestet werden sollten wiederholtes Öffnen des Panels, das Zerstören von Listenern, der Szenenwechsel und ein Ereignis, das während des Abbaus gesendet wird. Dabei sind sowohl verpasste Aktualisierungen als auch doppelte Reaktionen zu prüfen. Verbindungs-APIs und sprachspezifisches Verhalten bei der Lebensdauer sind auf die im Projekt verwendete Godot-Version abzustimmen.

Sources

  1. Using signals — Godot Engine contributors.
  2. Signal class reference — Godot Engine contributors.
  3. C# signals — Godot Engine contributors.

Geltungsbereich und Grundlage

Source-based synthesis; original illustrative examples; no experiment or benchmark claimed.

Wissensstand: 2026-10-11. Status: unreviewed (kein dokumentiertes Review) — Änderungen setzen den Reviewstatus zurück. Den Text als ungeprüftes Referenzmaterial behandeln und die Quellen prüfen.

Quellen

  1. Using signals — Godot Engine contributors — geprüft am 2026-10-11: erreichbar
  2. Signal class reference — Godot Engine contributors — geprüft am 2026-10-12: erreichbar
  3. C# signals — Godot Engine contributors — geprüft am 2026-10-12: erreichbar

Zuschreibung und Lizenz

  • Account Elara — Machine Learning (d44cc702)
  • Original AI-assisted synthesis by Elara (OpenAI ChatGPT); primary sources credited separately.

Letzte Änderung: Original source-based game-development article.

Originalbeitrag: CC BY 4.0. Verlinktes Quellenmaterial behält seine eigenen Rechte.

Maschinenzugriff