Finite-State-Maschine für die Entwicklung von Java-Spielen
Wie zeigen diese verschiedenen Vorgänge unterschiedliche Auswirkungen im Spiel? Durch das Festlegen verschiedener Zustände im Programm wird die Logik unabhängig vom aktuellen Zustand ausgeführt. Tatsächlich nennt man das: endliche Zustandsmaschine! Lassen Sie uns mit dem untenstehenden Herausgeber mehr herausfinden.
In verschiedenen Phasen sind die Logik des Spiels und die angezeigte Benutzeroberfläche unterschiedlich.
Nehmen Sie als Beispiel Backgammon. Die entsprechende Benutzeroberfläche und Logik sind unterschiedlich, wenn das Spiel beginnt, während des Spiels und wenn das Ergebnis festgelegt wird.
Im Spiel ist es in mehrere Zustände unterteilt: Schach alleine spielen, Schach mit dem Gegner spielen, Spiel pausieren, Spiel bereuen usw.
Ein weiteres Beispiel sind die Charaktere in RPG-Spielen: Stehen, Gehen, Laufen, Angreifen und Sterben sind allesamt unterschiedliche Animationen.
Senden Sie eine Kugel, vom Erscheinen bis zum Vorwärtsbewegen und dem Treffen des Ziels. oder aus dem Bildschirm fliegen, alle haben unterschiedliche Logik.
Wie erreicht man diese Effekte?
Im Programm werden verschiedene Zustände eingestellt. Unabhängig vom aktuellen Zustand wird die Logik ausgeführt.
Das nennt man: endliche Zustandsmaschine!
Ist es nicht sehr einfach? Unterschätzen Sie es nicht. Komplexe Spielfunktionen werden dadurch realisiert. Verwandte Tutorials: Java-Video-Tutorial
Als nächstes verwenden wir Code, um einen einfachen Effekt zu erzielen.
Nehmen Sie auch ein kleines Quadrat als Beispiel und lassen Sie es sich in einer vorgeschriebenen Weise auf dem Bildschirm bewegen.
package game6; import java.awt.Color; import java.awt.Graphics; import javax.swing.JPanel; /** * java游戏开发杂谈 * ---demo6:有限状态机 * * @author 台哥编程课堂 * https://www.cnblogs.com/chaohi/ * * @date 2019-04-25 */ public class GamePanel extends JPanel{ /** 屏幕的宽和高 */ private int width,height; public GamePanel(int width, int height) { this.width = width; this.height = height; this.setSize(width, height); //设置当前画布可以获得焦点。 this.setFocusable(true); } /**方块的位置*/ private int fk_x = 60; private int fk_y = 60; /** * 画布的绘制 */ public void paintComponent(Graphics g) { super.paintComponent(g); //画绿色背景 g.setColor(new Color(0x9391d6)); g.fillRect(0, 0, width, height); //绘制方块,大小为80 g.setColor(Color.red); g.fillRect(fk_x, fk_y, 80, 80); } //四个状态,对应四个方向的运动 private static final int stage_left = 0; private static final int stage_right = 1; private static final int stage_up = 2; private static final int stage_down = 3; //当前状态,初始为向右 private int stage = stage_right; /** * 游戏逻辑,处理方块的运动,每次横纵坐标都移动1个像素 */ public void logic() { switch(stage) { case stage_right: if(fk_x < 260){ fk_x = fk_x + 1; //右移一个像素 }else{ stage = stage_down; //超出指定范围,改为向下状态 } break; case stage_down: if(fk_y < 260){ fk_y = fk_y + 1; }else{ stage = stage_left; } break; case stage_left: if(fk_x > 60){ fk_x = fk_x - 1; }else{ stage = stage_up; } break; case stage_up: if(fk_y > 60){ fk_y = fk_y - 1; }else{ stage = stage_right; } break; } } }
Die anderen beiden Klassen, GameFrame und GameThread, sind die gleichen wie im vorherigen Blog und werden daher hier nicht veröffentlicht.
Der Effekt des laufenden Programms besteht darin, dass das rote Quadrat in der oberen linken Ecke beginnt und sich nach rechts bewegt , nach unten, nach links Bewegen, nach oben bewegen und im Uhrzeigersinn wechseln.
Im Code haben wir vier Zustände definiert, die der Bewegung in die vier Richtungen entsprechen
In der Logikmethode des Spielthreads wird das Positionsattribut entsprechend dem aktuellen Zustand geändert , und der Thread Rufen Sie dann die Schnittstelle auf, um sie neu zu zeichnen.
Die von
verwendeten Codebeispiele verfügen über grobe Schnittstellen, da der Zweck darin besteht, Wissenspunkte einzuführen. Je einfacher sie sind, desto einfacher sind sie zu verstehen.Das obige ist der detaillierte Inhalt vonFinite-State-Maschine für die Entwicklung von Java-Spielen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen





Leitfaden zur perfekten Zahl in Java. Hier besprechen wir die Definition, Wie prüft man die perfekte Zahl in Java?, Beispiele mit Code-Implementierung.

Leitfaden für Weka in Java. Hier besprechen wir die Einführung, die Verwendung von Weka Java, die Art der Plattform und die Vorteile anhand von Beispielen.

Leitfaden zur Smith-Zahl in Java. Hier besprechen wir die Definition: Wie überprüft man die Smith-Nummer in Java? Beispiel mit Code-Implementierung.

In diesem Artikel haben wir die am häufigsten gestellten Fragen zu Java Spring-Interviews mit ihren detaillierten Antworten zusammengestellt. Damit Sie das Interview knacken können.

Java 8 führt die Stream -API ein und bietet eine leistungsstarke und ausdrucksstarke Möglichkeit, Datensammlungen zu verarbeiten. Eine häufige Frage bei der Verwendung von Stream lautet jedoch: Wie kann man von einem Foreach -Betrieb brechen oder zurückkehren? Herkömmliche Schleifen ermöglichen eine frühzeitige Unterbrechung oder Rückkehr, aber die Stream's foreach -Methode unterstützt diese Methode nicht direkt. In diesem Artikel werden die Gründe erläutert und alternative Methoden zur Implementierung vorzeitiger Beendigung in Strahlverarbeitungssystemen erforscht. Weitere Lektüre: Java Stream API -Verbesserungen Stream foreach verstehen Die Foreach -Methode ist ein Terminalbetrieb, der einen Vorgang für jedes Element im Stream ausführt. Seine Designabsicht ist

Anleitung zum TimeStamp to Date in Java. Hier diskutieren wir auch die Einführung und wie man Zeitstempel in Java in ein Datum konvertiert, zusammen mit Beispielen.

Kapseln sind dreidimensionale geometrische Figuren, die aus einem Zylinder und einer Hemisphäre an beiden Enden bestehen. Das Volumen der Kapsel kann berechnet werden, indem das Volumen des Zylinders und das Volumen der Hemisphäre an beiden Enden hinzugefügt werden. In diesem Tutorial wird erörtert, wie das Volumen einer bestimmten Kapsel in Java mit verschiedenen Methoden berechnet wird. Kapselvolumenformel Die Formel für das Kapselvolumen lautet wie folgt: Kapselvolumen = zylindrisches Volumenvolumen Zwei Hemisphäre Volumen In, R: Der Radius der Hemisphäre. H: Die Höhe des Zylinders (ohne die Hemisphäre). Beispiel 1 eingeben Radius = 5 Einheiten Höhe = 10 Einheiten Ausgabe Volumen = 1570,8 Kubikeinheiten erklären Berechnen Sie das Volumen mithilfe der Formel: Volumen = π × R2 × H (4

Java ist eine beliebte Programmiersprache, die sowohl von Anfängern als auch von erfahrenen Entwicklern erlernt werden kann. Dieses Tutorial beginnt mit grundlegenden Konzepten und geht dann weiter zu fortgeschrittenen Themen. Nach der Installation des Java Development Kit können Sie das Programmieren üben, indem Sie ein einfaches „Hello, World!“-Programm erstellen. Nachdem Sie den Code verstanden haben, verwenden Sie die Eingabeaufforderung, um das Programm zu kompilieren und auszuführen. Auf der Konsole wird „Hello, World!“ ausgegeben. Mit dem Erlernen von Java beginnt Ihre Programmierreise, und wenn Sie Ihre Kenntnisse vertiefen, können Sie komplexere Anwendungen erstellen.
