Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
| Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
| ef:arcadeintroduction [2022/11/29 12:56] – lehmannr | ef:arcadeintroduction [2022/11/29 14:02] (aktuell) – [Akteure (Spieler, Gegner etc. hinzufügen (Sprites und Spritelists)] lehmannr | ||
|---|---|---|---|
| Zeile 2: | Zeile 2: | ||
| Nachdem man die Arcade-Bibliothek eingebunden hat (mittels '' | Nachdem man die Arcade-Bibliothek eingebunden hat (mittels '' | ||
| Zentral dabei sind vor allem die folgenden Funktionen: | Zentral dabei sind vor allem die folgenden Funktionen: | ||
| - | |||
| - | |||
| - | |||
| <sxh python> | <sxh python> | ||
| import arcade | import arcade | ||
| Zeile 29: | Zeile 26: | ||
| arcade.run() | arcade.run() | ||
| </ | </ | ||
| + | |||
| + | ===== Der klassische Game-Loop ===== | ||
| Mit dem oben verwendeten Prinzip könnte man Grafiken in einem Fenster erstellen - dafür gibt es in Arcade auch etliche Funktionen (siehe [[https:// | Mit dem oben verwendeten Prinzip könnte man Grafiken in einem Fenster erstellen - dafür gibt es in Arcade auch etliche Funktionen (siehe [[https:// | ||
| - | * Das Spiel soll mit x FPS (Frames pro Sekunde) immer neu gezeichnet werden (Game-Loop) | ||
| - | * Im Spiel sollen verschiedene Akteure (Spieler, Gegner etc.) vorhanden sein (Sprites) | ||
| - | * Das Spiel soll Events erkennen und darauf reagieren (Tastatureingaben, | ||
| - | Ein erstes Template, welches | + | * Das Spiel soll mit x FPS (Frames pro Sekunde) laufen (Game-Loop) |
| + | * Bei jedem " | ||
| + | |||
| + | Um diese Funktionalitäten | ||
| In der neuen Klasse '' | In der neuen Klasse '' | ||
| + | |< 1200px 200px 1000px>| | ||
| + | ^Befehl ^ Beispielbefehl/ | ||
| + | | '' | ||
| + | | '' | ||
| + | | '' | ||
| + | | '' | ||
| + | |||
| + | <sxh python> | ||
| + | import arcade | ||
| + | | ||
| + | class MyGame(arcade.Window): | ||
| + | def __init__(self, | ||
| + | # Konstruktor der Elternklasse aufrufen | ||
| + | super().__init__(width, | ||
| + | # Hintergrundfarbe setzen | ||
| + | arcade.set_background_color(arcade.color.AMAZON) | ||
| + | |||
| + | def setup(self): | ||
| + | # die x-Koordinate speichern als Objektvariable | ||
| + | self.xValue = 0 | ||
| + | |||
| + | def on_draw(self): | ||
| + | # Alles löschen | ||
| + | self.clear() | ||
| + | # Alles neu zeichnen. | ||
| + | arcade.draw_circle_filled(self.xValue, | ||
| + | |||
| + | def on_update(self, | ||
| + | # x-Wert vergrössern | ||
| + | self.xValue = self.xValue + 5 | ||
| + | |||
| + | def main(): | ||
| + | # Das Objekt der Klasse MyGame erstellen | ||
| + | window = MyGame(800, 600, " | ||
| + | window.setup() # setup aufrufen | ||
| + | arcade.run() | ||
| + | |||
| + | # Nur falls diese Datei direkt über Python aufgerufen wird, main() starten | ||
| + | if __name__ == " | ||
| + | main() | ||
| + | </ | ||
| + | |||
| + | ===== Events (Keyboard, Mouse) verarbeiten ===== | ||
| + | Wenn der Spieler eine Aktion tätigt (z.B. W,A,S,D auf der Tastatur drückt), soll dies im Spiel einen Einfluss haben. Diese Events (z.B. Tastaturbefehle) kann man auch in der Klasse '' | ||
| + | Tipp: man kann innerhalb von '' | ||
| + | |||
| + | <sxh Python> | ||
| + | import arcade | ||
| + | | ||
| + | class MyGame(arcade.Window): | ||
| + | |||
| + | def __init__(self, | ||
| + | # Konstruktor der Elternklasse aufrufen | ||
| + | super().__init__(width, | ||
| + | # Hintergrundfarbe setzen | ||
| + | arcade.set_background_color(arcade.color.AMAZON) | ||
| + | |||
| + | def setup(self): | ||
| + | # die x-Koordinate speichern als Objektvariable | ||
| + | self.xValue = 0 | ||
| + | self.xVel = 0 | ||
| + | |||
| + | def on_draw(self): | ||
| + | # Alles löschen | ||
| + | self.clear() | ||
| + | # Alles neu zeichnen. | ||
| + | arcade.draw_circle_filled(self.xValue, | ||
| + | |||
| + | def on_update(self, | ||
| + | # x-Wert vergrössern | ||
| + | self.xValue = self.xValue + self.xVel | ||
| + | | ||
| + | def on_key_press(self, | ||
| + | # Wenn eine Taste gedrückt wird | ||
| + | if key == arcade.key.RIGHT: | ||
| + | self.xVel = 5 | ||
| + | elif key == arcade.key.LEFT: | ||
| + | self.xVel = -5 | ||
| + | | ||
| + | def on_key_release(self, | ||
| + | self.xVel = 0 | ||
| + | |||
| + | def main(): | ||
| + | # Das Objekt der Klasse MyGame erstellen | ||
| + | window = MyGame(800, 600, " | ||
| + | window.setup() # setup aufrufen | ||
| + | arcade.run() | ||
| + | |||
| + | # Nur falls diese Datei direkt über Python aufgerufen wird, main() starten | ||
| + | if __name__ == " | ||
| + | main() | ||
| + | </ | ||
| + | <WRAP center round todo 80%> | ||
| + | **Aufgabe** | ||
| + | * Verändere das Programm von oben, sodass man mit den Pfeiltasten den Kreis nach rechts, links, oben, unten bewegen kann. | ||
| + | * Verändere das Programm von oben, sodass der Kreis an den Rändern des Fensters stehen bleibt. | ||
| + | * Verändere das Programm von oben, sodass man die Bewegung des Kreises nicht abrupt ändern kann. Der Kreis soll quasi die Beschleunigung verändern, so dass man ihn schneller und langsamer machen kann. | ||
| + | </ | ||
| + | |||
| + | ===== Akteure (Spieler, Gegner etc. hinzufügen (Sprites und Spritelists) ===== | ||
| + | Mit den Konzepten von oben könnte man ein ganzes Spiel programmieren. Doch Arcade stellt uns weitere Hilfsobjekte und Methoden zur Verfügung, die das Programmieren eines Spiels erleichtern sollen. Die Klasse '' | ||
| + | Haben die Sprites eine eigene '' | ||
| + | |||
| + | Sprites erstellt man, indem man eine Klasse von der Klasse '' | ||
| + | |||
| + | [[https:// | ||