efinf:blcks2017:gameloop

Differences

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

Link to this comparison view

Next revision
Previous revision
efinf:blcks2017:gameloop [2018/03/27 11:31] – created Ivo Blöchligerefinf:blcks2017:gameloop [2018/03/27 11:44] (current) – [Auswerten von Knöpfen / Joysticks] Ivo Blöchliger
Line 1: Line 1:
 +====== Game loop ======
  
 +<code python>
 +nextEvent = time.ticks_ms() + zeitBisEreignis # Zeit jetzt plus Dauer bis zum nächsten Ereignis
 +while True:
 +  if time.ticks_ms()>= nextEvent:
 +    # Tun, was zu tun ist
 +    nextEvent = time.ticks_ms() + zeitBisEreignis
 +  if userInteraction:
 +    # Interaktion auswerten
 +    # eventuell weitere Ereignisse generieren  
 +</code>
 +
 +Erweiterung: Array von Ereignissen und entsprechender Eintrittsszeit, sortieren nach letzterer.
 +
 +Variante: Aktoren (z.B. ein Space-Invader), der selbst zeitliche Ereignisse verwaltet:
 +<code python>
 +class Actor():
 +  def __init__(self, helper):
 +     self.helper=helper
 +     self.nextEvent = time.ticks_ms()+whatever
 +    
 +  def step(self):
 +     if self.nextEvent<=time.ticks_ms():
 +        # Tu was
 +</code>
 +Im Game loop sähe das dann so aus:
 +<code python>
 +actors = [.....]  # Liste von Aktoren
 +while True:
 +  for i in range(len(actors)):
 +     actors[i].step()
 +  if time.ticks_ms()>= nextEvent:
 +    # bla bla etc.
 +    
 +</code>
 +  
 +====== Auswerten von Knöpfen / Joysticks ======
 +  * Vorheriger Zustand der Knöpfe, Zeit seit letzer Änderung speichern.
 +  * Je nach Zustandsänderung und vergangener Zeit, Ereignis auslösen.
 +
 +Eine Kapselung in eine Klasse wäre denkbar. Eine Methode wird permanent aufgerufen; darin werden die physikalischen Knöpfe ausgewertet. Eine weitere Methode liefert ein Array mit Ereignissen, falls denn welche aufgetreten sind.