Body Pong

Aus toolbox_interaktion
Wechseln zu: Navigation, Suche

Semesterarbeit des Fachbereichs Medientechnik / Mediendesign WS 04/05

Bodypong foto 1.jpg

Bodypong logo.png

Beschreibung

Konzept der interaktiven Anwendung

Das Spielprinzip der klassischen Anwendung "Pong" oder "Tele Tennis" ist schnell beschrieben. Das Spiel ist für ein oder zwei Spieler ausgelegt. Jeder Spieler bedient mit einem Joystick einen weißen Balken, der links oder rechts am Bildschirmrand angeordnet ist. Dieser Balken symbolisiert einen Tennisschläger, ein weißes Quadrat, das sich von links nach rechts beziehungsweise von oben nach unten bewegt, den Ball. Der Schläger kann mit dem Joystick nach oben und unten positioniert werden. Berührt der Ball einen Schläger, so ändert sich die Richtung des Balls in entgegen gesetzter Richtung. Während des Spielverlaufs erhöht sich die Geschwindigkeit des Balls. Verfehlt ein Spieler den Ball, so bekommt der andere einen Punkt. Das Spiel endet, wenn ein Spieler eine bestimmte Anzahl von Punkten erreicht hat.

"Body Pong" ist die interaktive Variante des klassischen Spiels. Anstatt die Spielschläger mittels Joystick zu bedienen, realisierte das Team die Möglichkeit mit Hilfe der Bildverarbeitung, wie der Name schon sagt, die Bedienung mit dem ganzen Körper eines Schlägers. Dazu werden zwei Projektionsflächen zueinander aufgestellt, auf die jeweils das Spiel über Video-Beamer dargestellt werden. Über den Leinwänden befinden sich zwei Kameras, die das Spielfeld permanent filmen. Betreten nun zwei Spieler den "überwachten" Bereich, startet das Spiel selbständig. Das jeweilige Kamerabild über einige Schritte der Bildverarbeitung soweit analysiert und Koordinaten des Spielers im Bild gewonnen. Die Koordinaten werden dann an die eine Softwarekomponente gesendet, die die Steuerung und Berechnungen des Spielverlaufs ausführt. Die folgende vereinfachte Grafik stellt den Aufbau der Hardwarekomponenten dar.

Bodypong aufbau.png

Neben der interaktiven Bedienung der Anwendung wurde der Spielverlauf erweitert. Nach einem Zeitintervall erreichen die Spieler den nächsten Level, das wird durch einen Hintergrund-wechsel dargestellt. Die Hintergründe wurden von jedem Teammitglied gestaltet.
Das Sounddesign war ebenfalls in der Uhrversion noch sehr begrenzt. Ein einfaches "Pong" wurde bei jeder Berührung der Banden und Schläger wiedergegeben. Das Team erstellte selbst Soundloops und Stimmen, die die Spielführung unterstützen.
Auch sollten beide Spieler sehen, wer den aktuellen Punkt bekommen hat oder wer das Spiel gewonnen hat. Dafür werden Standbilder aus den Kamerabildern gewonnen und in der Spieldarstellung visualisiert.

Aspekte der Interaktion

Dieses Spiel ist wirklich interaktiv. Der "Mensch" beziehungsweise der Spieler ist ein wichtiger Bestandteil des Hardware- und Softwaresystems und nimmt, im abstrakten Sinne, die Stellung eines Teilsystems, nach unseren Definitionen der "Toolbox Interaktion", ein. Der Akteur bedient nicht ein Gerät zur Steuerung, sondern seine Erscheinung und Präsenz wird zum elementaren Bedienungselement. Er sieht und handelt - bewegt sich von Links nach Rechts. Das System "sieht", erfasst, analysiert und reagiert in Echtzeit und positioniert die Projektion des Spielers,nämlich den Schläger, an die richtige Stelle. Die Installation ist genau für diese Verwendung entwickelt worden.Fehlt der "Mensch" in der Reihe der Teilsysteme, kann es nicht mehr funktionieren.

Echtzeit Anforderungen an eine Anwendung

Damit so eine Kombination von Teilsystemen, wie im Fall "Body Pong", überhaupt funktionsfähig wird, müssen diese in Echtzeit Kommunizieren und funktionieren. Eine Aktion eines Spielers muss sofort oder mit einer unmerklichen Verzögerung von der Kette der Systemkomponenten verarbeitet werden und die Reaktion sofort dem Benutzer des Systems wiedergegeben werden. Um genau diese Anforderung zu erfüllen muss die Entwicklung aller Komponenten wohlgeplant und getestet werden.

Prototypentwicklung

Nach langen Recherchen und Tests verschiedener Möglichkeiten, konnte das Projektteam erfolgreich einen Prototyp der Installation entwickeln. Genau an diesen Prototypen konnte das Team weitere Rahmenbedingungen erforschen, die in die weiteren Planungen einflossen. Neue Erkenntnisse über Raumgröße, Installation der Hardware und Funktionsfähigkeit der Softwarekomponenten waren wichtige Resultate des Prototyps. Folgende vereinfachte Grafik zeigt eine schematische Darstellung der Teilsysteme. Darüber hinaus wird die Funktion des "Menschen" in der Kette der Teilsysteme deutlich.

Bodypong schema.png

Die Teilsysteme im Überblick

Bodypong foto 2.jpg

In diesem Kapitel soll ein detaillierter Überblick über Anordnung und Funktion der einzelnen Teilssysteme gegeben werden.

Der Spieler wird von einer MiniDV Kamera gefilmt. Das Analoge Videosignal wird von einer Framgrabber-Karte digitalisiert und von der ersten Softwarekomponente EyesWeb verarbeitet. Dabei werden die Koordinaten des Spielers im Kamerabild gewonnen. EyesWeb ist eine Open-Source Anwendung, die für die Bild-, Audio- und Signalverarbeitung entwickelt worden ist. Über ein Midi-Interface und dem Midi-Protokoll werden die gewonnen Daten an die Softwaresteuerung übertragen. Die Steuerung beziehungsweise die Rechenprozesse des Spiels wird von einer Kombination von Macromedia Director und Flash realisiert. Midi wurde eigentlich zur Steuerung von digitalen Musikinstrumenten entwickelt und dient in diesem Anwendungsfall als Übertragungsmöglichkeit aller relevanten Daten. Die Kommunikation der einzelnen Teilsysteme wird in dem Kapitel "Kommunikation der Teilsystem" gesondert behandelt. Die berechneten Spieldaten werden wieder über Midi-Interface und Midi-Protokoll an die Softwarekomponenten, die die Funktion der Visualisierung übernehmen, gesendet und über Video-Beamer dargestellt. Es ist hier Anzumerken, dass zwei Spieler das System bedienen und sich die Teilsysteme je auf zwei Computer verteilen. Das zentrale Element dieses System nimmt die Steuerung des Spiels ein. Folgende detaillierte Grafik der Teilsysteme gibt eine

Softwareentwicklung des Spiels

Die Entwicklung der einzelnen Softwarekomponenten eines Echtzeitsystems erhöht den Schwierigkeitsfaktor der Softwareentwicklung ungemein. Alle Teilsysteme müssen autark und stabil während der Laufzeit ausgeführt werden. Fällt ein Teilsystem aus, sollten andere von dem Ausfall nicht unterbrochen werden. Dies hat eine Modularität der Teilsysteme zur Folge, die bei belieben ausgetauscht werden können. Dabei ist zu beachten, dass eine Funktionserweiterung in einem der Teilsysteme bedingt eine Funktionserweiterung in allen anderen Teilsystemen. Somit multipliziert sich der Programmieraufwand für eine Funktionserweiterung um fast x Teilsysteme!

Softwarearchitektur

Das Spiel "Body Pong" wurde wesentlich mit drei Softwareplattformen entwickelt - EyesWeb, Macromedia Flash MX 2004 und Macromedia Director MX 2004.

EyesWeb ist ein Programm das zur Bild-, Audio- und Signalverarbeitung entwickelt wurde. Es extrahiert die Spielerposition aus dem Kamerabild und sendet die gewonnen Koordinaten an die Steuerungssoftware weiter. Die zentrale Steuerung übernimmt ein Directorprojektor in dem ein Flashfi lm eingebettet ist. Director dient als Kommunikationsschnittstelle zwischen allen Teilsystemen. Über Midi-Active-X Steuerelemente kann in Director komfortabel über Midi Daten zwischen anderen Komponenten ausgetauscht werden. Der Directorfilm übergibt empfangene Daten an den eingebetteten Flashfilm, der die Spielsteuerung beziehungsweise die Spielberechnungen vornimmt. Daten zur Darstellung werden nach den Berechnungen an den Directorprojektor gesendet, der diese an die nächsten zwei Projektoren übermittelt. Diese zwei Einheiten visualisieren das Spiels über je einem angeschlossenen Video-Beamer.

Beschreibung EyesWeb-Patch

Ausgangspunkt für den Patch ist eine Videoquelle, die zwei Umwandlungen unterworfen wird. Zum einen wird das Videobild gespiegelt, damit Bewegungen auf der Leinwand und in der Realität übereinstimmen. Zum anderen wird das Videosignal durch einen Deinterlacer gesplittet, um eine bessere Performance zu erzielen.

Verfolgen wir zunächst den unteren Hauptstrang. Nach einer Umformung in ein Graustufen-Bild, wird eine Hintergrundsubtraktion vorgenommen. Hierzu wird ein Referenzbild des Hintergrund aufgenommen und mit dem aktuellen Videobild verglichen. Änderungen, wie das Eintreten eines Spielers und dessen Bewegungen, können so vom Hintergrund herausgelöst werden. Durch morphologische Operationen (Opening und Closing) wird die Exrahierung verbessert.

Nun kann der Schwerpunkt des Objekts errechnet werden, von dessen Koordinaten wir nur den x-Wert benötigen. Vor der Übermittlung werden noch zwei Schritte durchgeführt. Es wird erstens eine if-Abfrage nach Ungültigkeit eingesetzt. Ist der X-Wert ungültig, wird 0 übermittelt. Zweitens wird eine Mittelung von vier x-Werten durchgeführt. Der x-Wert wird geglättet, die Steuerung wird für den Spieler angenehmer.

Zuletzt wird der x-Wert einer Skalierung auf den gültigen Midi-Werte-Bereich unterworfen. Nun erfolgt die Versendung des extrahierten x-Wertes über das Midi-Protokoll.

Zusätzlich zum Hauptstrang wurde noch eine Anzeige des Schwerpunktes implementiert. Sie diente vorallem zur Kontrole in früheren Stadien der Entwicklung. Der Schwerpunkt wird in das Videobild eingezeichnet, es ist nun sofort ersichtlich, ob der Schwerpunkt korrekt ermittelt wurde.

In der Endphase der Entwicklung wurde noch eine Steuerungsfunktionalität angedacht. Durch die Berechnung der Momente kann ermittelt werden, ob sich ein größeres Objekt, also zum Beispiel der Spieler, auf dem Spielfeld befindet. Ist dies der Fall (überprüft durch eine geeignete größer-als-Beziehung) wird ein Midi-Event gefeuert, welches von Director aufgefangen wird. Director startet nun den Countdown zum Spielstart. Diese Steuerungsmöglichkeit wurde jedoch nicht in der fertigen Anwendung implementiert.

Bodypong eyesweb patch.jpg

Kommunikation der Teilsysteme

Das Midi-Protokoll dient zur Übermittlung aller relevanten Steuerungsdaten. Dieses Protokoll wurde für die Steuerung von digitalen Musikinstrumenten entwickelt. Midi-Geräte benötigen ein Hardware- bzw. Softwareinterface zur Übertragung der Midi-Steuerbefehle. Nachdem viele Computer Midi schon implementiert haben, müssen die richtigen Treiber individuell für jeden Rechner konfi guriert werden. Eine Liste mit allen verwendeten Midi-Steuerbefehlen ist im Anhang zu finden.

Programmdokumentationen

Die Programmierung der einzelnen Softwareelemente setzt gute Kenntnisse in Macromedia Flash und Macromedia Director voraus. Der Programmcode ist ausführlich dokumentiert. Im Anhang sind alle Objekte und Funktionen tabellarisch aufgelistet und Beschrieben.

Anhang

Objekte und Funktionen

Directordatei: steuerung.dir

Name Typ Beschreibung Aufrufe
Skript: Member 2 Funktion
  • Konfiguriert die Midi-treiber
  • Gibt den Namen der Midi-Treiber auf Bühne aus
 
Skript: Member 3
EmpfangeDaten
Funktion/Eventlistener
  • empfängt Steuerungsdaten von Flash
  • Leitet Steuerungsdaten via Midi-Out an Darstellungseinheiten weiter
 
Skript auf Active-X
Steuerelemente
Midi-In-1 und Midi-In-2
Funktion
  • wertet die empfangene Midi Nachricht (EyesWeb) aus
  • Positioniert Spielerschläger in Flash
 
Skript: Member 26 starteSpiel
  • empfängt Steuerungsdaten von Flash
  • startet Startsequenz der Darstellungseinheiten
 

Flashdatei: steuerung.fla

Name Typ Beschreibung Aufrufe
controller Per Skript erzeugter MovieClip mit OnEnterFrame-Funktion
  • Zentrale Steuerung der Spielbewegungen
  • Positionierung des Spielballs
  • Kollisionserkennung
  • Spielt Kollisionssounds ab
  • erhöht den Spielstand P1 und P2
  • löst Event für CameraShots aus, bei Punktgewinn P1 und P2
  • Prüft das Spielende
  • spielende()
  • fotoP1()
  • fotoP2()
zeitsteuerung Per Skript erzeugter MoviClip mit OnEnterFrame-Funktion
  • addiert eine variable im Intervall +=0.25
  • bei einem festen Grenzwert wird das Level erhöht
  • nextLevel()
fotoP1 Funktion
  • Eventaufruf zu Director
  • Director erzeugt CameraShot von P1
  • getURL()
fotoP2 Funktion
  • Eventaufruf zu Director
  • Director erzeugt CameraShot von P2
  • getURL()
 
//Soundinitialisierung Deklaration
  • erzeugt Soundobjekte der Spielesounds
 
//Variablendeklaration Deklaration
  • erzeugt Konstanten und Variablen
 
starteSpiel Funktion
  • Stoppt alle Sounds
  • setzt Spielzeit, Punktestand, Ballposition zurück
  • Eventaufruf an Director das Spiel zu starten
  • startet einen Funktionsaufruf alle 50ms der Funktion sendeDaten
  • Spielt MovieClip "StartClip"
  • getUrl()
  • setInterval(sendeDaten,50)
  • _root.startClip.
  • gotoAndPlay(2)
gameover Funktion
  • Überprüft welcher Spieler gewonnen hat
  • startet den Gewinnersound
Löschen!!!
spielende Funktion
  • Prüft ob ein Spieler die maximale Punktezahl erreicht hat
  • timeout
timeout Funktion
  • stoppt das Spiel
  • startet den GameOverSound
  • nachdem der GameOverSound komplett abgespielt ist, wird die Funktion theWinner aufgerufen
  • stopSpiel
  • theWinner
stopSpiel Funktion
  • stoppt alle Sounds
  • Stoppt das Spiel
 
theWinner Funktion
  • Auswertung, welcher Spieler gewonnen hat
  • Gewinnersound wird abgespielt
 
SendeDaten Funktion
  • Event zu Director
  • sendet Daten zur Visualisierung
  • getUrl
NextLevel Funktion
  • erhöht das Level
  • wenn das letzte Level vorbei ist wird das Spiel beendet
  • erhöht die Ballgeschwindigkeit bei Levelwechsel
  • timeout
StartClip MovieClip
  • startet am Ende seiner Zeitleiste das Spiel, indem die Ballbewegung gestartet wird
  • spielt Sounds ab
 
Start-Knopf Button
  • startet das Spiel
  • starteSpiel
Stop-Knopf Button
  • stoppt das Spiel
  • stopSpiel

Directordatei: client1.dir bzw. client2.dir

Name Typ Beschreibung Aufrufe
Skript: Member 2 Funktion
  • Konfiguriert die Midi-treiber
  • Gibt den Namen der Midi-Treiber auf Bühne aus
 
Skript auf Active-X
Steuerelemente
Midi-In-1
Funktion
  • wertet die empfangene Midi Nachricht (Steuerung) aus
  • setzt alle relevanten Variablen für die Spieldarstellung
 
levelDesign Funktion
  • zeigt je nach level das richtige Hintergrundbild an
 
//Variablendeklaration Deklaration
  • Definiert Konstanten und Variablen
 

Flashdatei: client1.fl a bzw. client2.fl

Name Typ Beschreibung Aufrufe
controller Per Skript erzeugter MovieClip mit OnEnterFrame-Funktion
  • Positioniert Ball und Schläger
  • Skalierung der Koordinaten
  • Darstellung des Level Design
  • _root.mc_bg.gotoAndStop(_root.Round);
starteSpiel Funktion
  • Startet Start Sequenz
  • Positioniert Start Dialog
 

Midi-Steuerbefehle

Bodypong midi steuerbefehle.png