NoUserOrg

Reto Spoerri : Game Design : Zürich

ProgrammingPanda3dTutorialDasEventsystem

Filed in: Resources.ProgrammingPanda3dTutorialDasEventsystem · Modified on : Fri, 31 Jul 09

====== Das Eventsystem ======

weiterführende erkärung der Interaktiven Manipulation?

<code type="Python"> import direct.directbase.DirectStart from direct.showbase.DirectObject import DirectObject import sys

  1. diese klasse speichert welche tasten momentan gedrueckt werden

class KeyPollerClass( DirectObject ):

  def __init__( self ): 
    self.data = dict() 
    for key in POLLKEYS: 
      self.accept( key, self.event, [key, True] ) 
      self.accept( key+"-up", self.event, [key, False] ) 
      self.data[ key ] = False 
  def event( self, key, active ): 
    self.data[key] = active 
  def __getitem__( self, key ): 
    return self.data[key] 

keyPoller = KeyPollerClass() </code>

Diese Klasse speichert die aktuell gedrückten Tasten.



<code type="Python"> class KeyPollerClass( DirectObject ): </code> Definiert eine neue Klasse mit dem Namen „keyPollerClass“. Sie wird von DirectObject abgeleitet, dadurch können innerhalb dieser Klasse Events abgefangen werden.



<code type="Python"> self.data = dict() </code> Definiert einen Dictionary in welchem wir festhalten welche Tasten gedrückt sind.



<code type="Python"> for key in POLLKEYS: </code> Für jedes Element in der Liste POLLKEYS, wird der folgende block ausgeführt. <code type="Python"> self.accept( key, self.event, [key, True] ) </code> Definiert bei welchem Event (key), welcheFunktion aufgerufen wird (self.event), optional können noch Parameter angegeben werden, welche dieser Funktion übergeben werden. <code type="Python"> self.accept( key+"-up", self.event, [key, False] ) </code> Beim loslassen der Taste wird wiederum ein Event ausgelöst. (zBsp. Event „a-up“)



<code type="Python"> def event( self, key, active ):

  self.data[key] = active

</code> Diese Funktion wird beim auslösen des Events aufgerufen und speichert den aktuellen Zustand der Taste.