Bevy States: ausstehende Übergänge, Eintrittsarbeiten und Aufräumen koordinieren

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

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

Themen: bevy game-development game-flow scheduling states

Den aktuellen State von einem angeforderten Übergang unterscheiden, konkurrierende Anforderungen gezielt auflösen und dafür sorgen, dass Eintritt und Austritt eines States die von ihnen erzeugten temporären Objekte selbst verantworten.

Inhalt
  1. Einen State installieren und seine Aufgaben trennen
  2. Eine Anforderung als ausstehende Daten behandeln
  3. Einen konkreten Konflikt beim Laden auflösen
  4. Temporären Objekten einen Austritts-Verantwortlichen geben
  5. Die Semantik wiederholter Anforderungen bewusst wählen
  6. Quellen
  7. Geltungsbereich und Grundlage
  8. Quellen
  9. Zuschreibung und Lizenz
  10. Maschinenzugriff

Einen State installieren und seine Aufgaben trennen

In der zitierten Bevy-0.20.0-API installiert init_state die Ressourcen für den aktuellen und den ausstehenden State und aktiviert die Übergangs-Schedules. Für die State-Unterstützung ist StatesPlugin erforderlich, das in der Standard-Plugin-Sammlung enthalten ist. OnEnter dient für Arbeiten beim Eintritt, OnExit für Arbeiten beim Austritt, und eine in_state-Bedingung für Systeme, die laufen sollen, solange ein State aktiv ist. Das sind unterschiedliche Ausführungsverträge. [1]

Bei einem Menü gehört der Aufbau zum Eintritt und die Interaktion zu den laufenden Updates. Liegt der Aufbau in einem dauerhaft laufenden System, können Objekte immer wieder neu erzeugt werden, sofern zusätzliche Projektlogik dies nicht verhindert.

Eine Anforderung als ausstehende Daten behandeln

NextState hält das angeforderte Ziel vor. Der Wert kann von einem anderen System überschrieben werden, bevor die Übergänge laufen; es ist keine Event-Queue, die jede Anforderung bewahrt. Massgeblich ist allein der ausstehende Wert zum Zeitpunkt des Übergangs-Schedules. [2]

Standardmässig läuft StateTransition vor PreStartup und danach in jedem Frame nach PreUpdate. Eine Anforderung, die später im Frame erfolgt, wartet daher bis zum nächsten Übergangszeitpunkt, sofern das Projekt den Schedule nicht ausdrücklich an anderer Stelle ausführt. Code sollte nicht davon ausgehen, dass das Anfordern eines Ziels den aktuellen State sofort ändert oder sofort die Eintrittssysteme des Ziels ausführt. [3]

Einen konkreten Konflikt beim Laden auflösen

Angenommen, das Projekt definiert die States Menu, Loading und Playing. Die Auswahl eines Levels fordert das Laden an. Der Loading-State startet die Arbeit und wartet auf die Bereitschaft; erst danach sollte die Projektlogik den Wechsel zum Spielen anfordern.

Nun sei angenommen, dass die Bereitschaft und der Abbruch durch den Spieler im selben Update eintreffen. Hier ist eine dokumentierte Projektregel zu wählen, etwa dass der Abbruch Vorrang hat, und ein einzelnes Entscheidungssystem soll die endgültige Anforderung schreiben. Andernfalls können mehrere schreibende Systeme den ausstehenden Wert gegenseitig ersetzen, ohne dass die beabsichtigte Regel zum Ausdruck kommt. Beim Debuggen dieses Falls sind sowohl die Anforderung als auch der tatsächlich angewendete Übergang festzuhalten. Dies ist ein illustrativer Entwurf und keine gemessene Reproduktion einer Race Condition. [2]

Temporären Objekten einen Austritts-Verantwortlichen geben

Menüobjekte sollten sich von dauerhaften Objekten unterscheiden lassen, damit die Austrittsarbeit des Menüs nur entfernt, was ihm gehört. Ein Menü, das mit 4 Buttons entworfen wurde, sollte nach der Rückkehr wieder 4 Buttons enthalten. Der Austrittspfad ist ebenso sorgfältig zu prüfen wie der Eintrittspfad, einschliesslich eines Abbruchs während des Ladens.

State-Run-Conditions entscheiden, ob ausgewählte Systeme ausgeführt werden; sie beschreiben für sich genommen nicht jede Ressource und jede Entity, die einen Übergang überdauern soll. Diese Lebensdauer ist in der Setup- und Cleanup-Logik zu definieren. Ausserdem ist sicherzustellen, dass die erste Eintrittsarbeit ihre Abhängigkeiten am dokumentierten Startübergangszeitpunkt erhalten kann. [1][3]

Die Semantik wiederholter Anforderungen bewusst wählen

Das referenzierte NextState::set führt Eintritts- und Austritts-Schedules auch dann aus, wenn das Ziel dem aktuellen State entspricht. NextState::set_if_different ist zu verwenden, wenn überflüssige Anforderungen desselben States diese Schedules überspringen sollen; laut Referenz kann ein früheres explizites Setzen auf denselben State im selben Frame sie dennoch auslösen. [2]

Dieser Unterschied ist wichtig, wenn der Eintritt den Fortschritt zurücksetzt oder der Austritt temporäre Objekte löscht. Zu prüfen sind wiederholtes Betätigen eines Buttons, eine Rückkehr zum Menü und eine Anforderung desselben States. Methodennamen und Verhalten müssen zur Bevy-Version des Projekts passen; diese vorgeschlagenen Prüfungen wurden hier nicht ausgeführt.

Quellen

  1. AppExtStates — Bevy contributors.
  2. NextState — Bevy contributors.
  3. StateTransition — Bevy 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. AppExtStates — Bevy contributors — geprüft am 2026-10-12: erreichbar
  2. NextState — Bevy contributors — geprüft am 2026-10-12: erreichbar
  3. StateTransition — Bevy 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