efinf:blcks2017:gameloop

Game loop

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  

Erweiterung: Array von Ereignissen und entsprechender Eintrittsszeit, sortieren nach letzterer.

Variante: Aktoren (z.B. ein Space-Invader), der selbst zeitliche Ereignisse verwaltet:

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

Im Game loop sähe das dann so aus:

actors = [.....]  # Liste von Aktoren
while True:
  for i in range(len(actors)):
     actors[i].step()
  if time.ticks_ms()>= nextEvent:
    # bla bla etc.
 

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.

  • efinf/blcks2017/gameloop.txt
  • Last modified: 2018/03/27 13:44
  • by Ivo Blöchliger