Differences
This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
lehrkraefte:blc:informatik:glf20:gameloop [2020/12/07 13:47] Ivo Blöchliger [Der Game-Loop] |
lehrkraefte:blc:informatik:glf20:gameloop [2020/12/11 07:34] (current) Ivo Blöchliger [Animationen] |
||
---|---|---|---|
Line 16: | Line 16: | ||
</ | </ | ||
Dabei ist es wichtig, dass jeder einzelne Durchlauf möglichst wenig Zeit in Anspruch nimmt, damit das Spiel sofort auf Benutzereingaben reagieren kann. | Dabei ist es wichtig, dass jeder einzelne Durchlauf möglichst wenig Zeit in Anspruch nimmt, damit das Spiel sofort auf Benutzereingaben reagieren kann. | ||
+ | |||
+ | Das obige gibt es auch noch als [[https:// | ||
+ | |||
+ | ===== Animationen ===== | ||
Wenn es Dinge gibt, die über eine längere Zeit ablaufen, muss mit Zeitstempeln gearbeitet werden, z.B. so wird eine Aktion jede Sekunde einmal ausgeführt: | Wenn es Dinge gibt, die über eine längere Zeit ablaufen, muss mit Zeitstempeln gearbeitet werden, z.B. so wird eine Aktion jede Sekunde einmal ausgeführt: | ||
Line 28: | Line 32: | ||
| | ||
</ | </ | ||
+ | |||
+ | Eine ausführlichere Erklärung mit minimalen Beispiel gibt es in diesem [[https:// | ||
+ | und für Datenspender auf [[https:// | ||
===== Kleines (Bei)Spiel ===== | ===== Kleines (Bei)Spiel ===== | ||
<WRAP todo> | <WRAP todo> | ||
- | Idee: Der Benutzer kann einen Punkt auf dem Bildschirm hin- und her bewegen. | + | Studieren |
- | Zustand des Spiels: x-Kooordinate des Punktes | + | <hidden game0.py> |
+ | <code python game0.py> | ||
+ | from oxocard import * | ||
+ | from ivobuttons import * | ||
+ | from random import randrange | ||
- | Aktionen: Links, Rechts: Falls Verschiebung überhaupt möglich, wird der alte Punkte mit Schwarz überschrieben, | + | ivobuttons.delay=800 |
+ | ivobuttons.repeat_delay=400 | ||
+ | |||
+ | #Zustand vom Spiel | ||
+ | # Koordinaten vom Spieler initialisieren | ||
+ | x,y = 3,3 | ||
- | Passen sie dafür ' | + | # Unterprogramm um die aktuelle Position zu loeschen. Wird erst aufgeführt, |
+ | def loeschen(): | ||
+ | global x,y # Zugriff auf Variablen ausserhalb | ||
+ | fastDot(x, | ||
+ | |||
+ | # Unterprogramm um die aktuelle Position zu zeichnen. | ||
+ | def zeichnen(): | ||
+ | global x,y | ||
+ | fastDot(x, | ||
+ | fastRepaint() | ||
+ | |||
+ | fastDot(x, | ||
+ | fastRepaint() | ||
+ | |||
+ | # Game loop | ||
+ | while True: | ||
+ | s = ivobuttons.states() | ||
+ | if s & IVO_R2 and x< | ||
+ | loeschen() | ||
+ | x+=1 # Abkürzung für x=x+1 | ||
+ | zeichnen() | ||
+ | if s & IVO_L2 and x>0: | ||
+ | loeschen() | ||
+ | x-=1 # Abkürzung für x=x-1 | ||
+ | zeichnen() | ||
+ | |||
+ | </ | ||
+ | </ | ||
+ | |||
+ | Zustand des Spiels: x-Kooordinate des Spielers | ||
+ | |||
+ | Aktionen: Links, Rechts: Falls Verschiebung überhaupt möglich, wird der alte Punkte mit Schwarz überschrieben, | ||
</ | </ | ||
+ | |||
<WRAP todo> | <WRAP todo> | ||
Line 44: | Line 92: | ||
* Der Benutzer kann auch nach oben und unten. | * Der Benutzer kann auch nach oben und unten. | ||
* Der Benutzer kann damit zeichnen. | * Der Benutzer kann damit zeichnen. | ||
- | * Ein weiterer Punkt fällt von oben nach unten. Dieser muss gefangen werden (oder ausgewichen). | + | * Ein weiterer Punkt fällt von oben nach unten. Dieser muss gefangen werden (oder ausgewichen). Dazu müssen Sie mit timern (getms()) arbeiten. |
* Mehrere Punkte fallen... | * Mehrere Punkte fallen... | ||
- | * Die Steuerung erfolgt via Beschleunigungssensor und kippen der Karte. | + | * Die Steuerung erfolgt via Beschleunigungssensor und kippen der Karte. |
</ | </ |