lehrkraefte:blc:informatik:glf20:gameloop

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

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:
 </code> </code>
 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://fginfo.ksbg.ch/~ivo/videos/informatik/python/oxocard-gameloop.mp4|Video]] und für Datenspender auch auf [[https://web.microsoftstream.com/video/3c3214a9-4024-4697-83f9-34e6606f07d2|Stream]].
 +
 +===== 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:
          
 </code> </code>
 +
 +Eine ausführlichere Erklärung mit minimalen Beispiel gibt es in diesem [[https://fginfo.ksbg.ch/~ivo/videos/informatik/python/oxocard-gameloop-animation-timer.mp4|Video]]
 +und für Datenspender auf [[https://web.microsoftstream.com/video/3c3214a9-4024-4697-83f9-34e6606f07d2|Stream]].
  
 ===== Kleines (Bei)Spiel ===== ===== Kleines (Bei)Spiel =====
 <WRAP todo> <WRAP todo>
-Idee: Der Benutzer kann einen Punkt auf dem Bildschirm hin- und her bewegen.+Studieren und testen Sie folgenden Code
  
-Zustand des Spiels: x-Kooordinate des Punktes+<hidden game0.py> 
 +<code python game0.py> 
 +from oxocard import * 
 +from ivobuttons import * 
 +from random import randrange  # Funktion randrange importieren
  
-Aktionen: LinksRechts: Falls Verschiebung überhaupt möglichwird der alte Punkte mit Schwarz überschrieben, die x-Koordinate angepasst und der Punkt neu gezeichnet.+ivobuttons.delay=800            # Tasten erst nach 400ms repetieren repetieren beginnen 
 +ivobuttons.repeat_delay=400     # Tasten danach 5x pro Sekunde repetieren 
 +  
 +#Zustand vom Spiel 
 +# Koordinaten vom Spieler initialisieren 
 +x,y = 3,3
  
-Passen sie dafür 'ivobuttons.delay' und 'ivobuttons.repeat_delay' so andass das Spiel "spielbar ist".+# Unterprogramm um die aktuelle Position zu loeschenWird erst aufgeführt, wenn unten aufgerufen 
 +def loeschen(): 
 +    global x,y  # Zugriff auf Variablen ausserhalb 
 +    fastDot(x,y,BLACK)  # Wird noch nicht angezeigt 
 + 
 +# Unterprogramm um die aktuelle Position zu zeichnen. 
 +def zeichnen(): 
 +    global x,y 
 +    fastDot(x,y,RED) 
 +    fastRepaint()    # Erst jetzt Änderungen sichtbar machen. 
 + 
 +fastDot(x,y,RED) 
 +fastRepaint() 
 + 
 +# Game loop 
 +while True: 
 +    s = ivobuttons.states() 
 +    if s & IVO_R2 and x<7:  # Nur wenn nach rechts gegangen werden kann. 
 +        loeschen()  # Unterprogram loeschen ausführen 
 +        x+=1        # Abkürzung für x=x+1 
 +        zeichnen()  # Unterprogramm zeichnen ausführen  
 +    if s & IVO_L2 and x>0: 
 +        loeschen() 
 +        x-=1   # Abkürzung für x=x-1 
 +        zeichnen() 
 +     
 +</code> 
 +</hidden> 
 + 
 +Zustand des Spiels: x-Kooordinate des Spielers 
 + 
 +Aktionen: LinksRechts: Falls Verschiebung überhaupt möglich, wird der alte Punkte mit Schwarz überschrieben, die x-Koordinate angepasst und der Punkt neu gezeichnet.
 </WRAP> </WRAP>
 +
  
 <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. Siehe dazu https://www.tigerjython4kids.ch/index.php?inhalt_links=robotik/navigation.inc.php&inhalt_mitte=robotik/oxocard/sensor.inc.php
 </WRAP> </WRAP>
  • lehrkraefte/blc/informatik/glf20/gameloop.1607345255.txt.gz
  • Last modified: 2020/12/07 13:47
  • by Ivo Blöchliger