Ein von Gameengines unabhängiges User-Interface-System für PC Spiele

 
WEITER LESEN
Ein von Gameengines unabhängiges User-Interface-System für PC Spiele
Fachbereich 4: Informatik

      Ein von Gameengines
           unabhängiges
   User-Interface-System für PC
               Spiele

                        Diplomarbeit
         zur Erlangung des Grades eines Diplom-Informatikers
                 im Studiengang Computervisualistik

                           vorgelegt von
                   Arne Johannes Deutsch

Erstgutachter:   Prof. Dr.-Ing. Stefan Müller
                 (Institut für Computervisualistik, AG Computergraphik)
Zweitgutachter: Dipl.-Inform. Oliver Abert
                (Institut für Computervisualistik, AG Computergraphik)

Koblenz, im März 2006
Ein von Gameengines unabhängiges User-Interface-System für PC Spiele
1

Erklärung

Ich versichere, dass ich die vorliegende Arbeit selbständig verfasst und keine
anderen als die angegebenen Quellen und Hilfsmittel benutzt habe.

                                                                               Ja   Nein

 Mit der Einstellung der Arbeit in die Bibliothek bin ich einverstanden.            

 Der Veröffentlichung dieser Arbeit im Internet stimme ich zu.                      

.................................................................................
(Ort, Datum)                                                       (Unterschrift)
Ein von Gameengines unabhängiges User-Interface-System für PC Spiele
(Platzhalter für Aufgabenstellung)
Ein von Gameengines unabhängiges User-Interface-System für PC Spiele
Inhaltsverzeichnis

1 Einleitung                                                                                                                           7
  1.1 Motivation .    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .    7
  1.2 Ziele . . . .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .    7
  1.3 Aufbau . . .    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .    8
  1.4 Zur Sprache     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .    9

2 Standard User Interfaces                                                 10
  2.1 Komponenten . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
  2.2 Features . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
  2.3 Architektur . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18

3 User Interfaces in Computerspielen                                                                                                  24
  3.1 Spielanalysensystematik . . . . . .                                 .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   25
  3.2 Kartentaktikspiel: Etherlords . . .                                 .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   26
  3.3 Echtzeitstrategie: Warcraft 3 . . . .                               .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   30
  3.4 Ergebnisse . . . . . . . . . . . . . .                              .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   34
      3.4.1 Verhalten . . . . . . . . . .                                 .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   34
      3.4.2 Features . . . . . . . . . . .                                .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   35
      3.4.3 Standard Komponenten . .                                      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   36
      3.4.4 Erweiterte Komponenten . .                                    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   38

4 Game UI-Framework                                                                                                                   40
  4.1 Anforderungen . . . . . . . . . . .                                 .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   40
      4.1.1 Allgemeine Anforderungen .                                    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   40
      4.1.2 Featureanforderungen . . . .                                  .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   42
      4.1.3 Komponentenanforderungen                                      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   43
  4.2 Design . . . . . . . . . . . . . . . .                              .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   44
      4.2.1 Komponentenaufbau . . . .                                     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   45
      4.2.2 Kommunikation . . . . . . .                                   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   46
      4.2.3 Look and Feel . . . . . . . .                                 .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   46
      4.2.4 Ein- und Ausgaben . . . . .                                   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   47

                                                          3
Ein von Gameengines unabhängiges User-Interface-System für PC Spiele
INHALTSVERZEICHNIS                                                           4

   4.3   Implementation . . . . . . . . . . . . . . . . . . . . . . . . . . 48
         4.3.1 Technologien . . . . . . . . . . . . . . . . . . . . . . . 49
         4.3.2 Details . . . . . . . . . . . . . . . . . . . . . . . . . . . 49

5 Demos                                                                   58
  5.1 Allgemeines . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
  5.2 Demo 1 - Warcraft 3 . . . . . . . . . . . . . . . . . . . . . . . 61
  5.3 Demo 2 - Etherlords . . . . . . . . . . . . . . . . . . . . . . . 62

6 Ausblick                                                              66
  6.1 Eigene Mauszeiger . . . . . . . . . . . . . . . . . . . . . . . . 66
  6.2 Unabhängigkeit von Programmiersprachen . . . . . . . . . . . 66
  6.3 Konfiguration mittels Beschreibungssprache . . . . . . . . . . 67

7 Fazit                                                                    68
  7.1 Erfüllte Anforderungen . . . . . . . . . . . . . . . . . . . . . . 68
  7.2 Kritik . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
  7.3 Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . 73

A Weitere Spielanalysen                                                     74
  A.1 Actionrollenspiel: Sacred . . . . . . . . . . . . . . . . . . . . .   75
  A.2 Aufbausimulation: Die Siedler 5 . . . . . . . . . . . . . . . . .     81
  A.3 Rundenstrategie: Master of Orion 3 . . . . . . . . . . . . . . .      85

B Screenshots der Spiele                                                    89
Ein von Gameengines unabhängiges User-Interface-System für PC Spiele
Abbildungsverzeichnis

 2.1   Aufbau der Komponenten in Swing am Beispiel eines Buttons 19
 2.2   Beispiel einer Delegate-Installation in Swing . . . . . . . . . . 22

 4.1   Die Architektur des UI-Systems . . . . . . . . . . . . . . . .                                        .   45
 4.2   Zusammenhänge der wichtigsten Klassen . . . . . . . . . . .                                           .   48
 4.3   Aufgabendelegation der Klasse UISystem . . . . . . . . . . .                                          .   50
 4.4   Unabhängigkeit des UI-Systems von anderen Bibliotheken .                                              .   51
 4.5   Das Interface Component und das View . . . . . . . . . . .                                            .   53
 4.6   Aufbau eines Buttons im UI-System . . . . . . . . . . . . . .                                         .   54
 4.7   Events und Listeners des UI-Systems . . . . . . . . . . . . .                                         .   55
 4.8   Relevante Klassen im Look and Feel System am Beispiel eines
       Buttons . . . . . . . . . . . . . . . . . . . . . . . . . . . . .                                     . 57

 5.1   Verschiedene Mouseover-Effects der Buttons in Demo2 . . . . 62
 5.2   Demo 1 Screenshots . . . . . . . . . . . . . . . . . . . . . . . . 64
 5.3   Demo 2 Screenshots . . . . . . . . . . . . . . . . . . . . . . . . 65

 B.1   Sacred Screenshots . . . . . .    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   90
 B.2   Siedler 5 Screenshots . . . . .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   91
 B.3   Warcraft 3 Screenshots . . . .    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   92
 B.4   Etherlords Screenshots . . . .    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   93
 B.5   Master of Orion 3 Screenshots     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   94

                                     5
Ein von Gameengines unabhängiges User-Interface-System für PC Spiele
Tabellenverzeichnis

 2.1   Komponenten in Swing . . . . . . . . . . . . . . . . . . . . . . 11
 2.2   Features in Swing . . . . . . . . . . . . . . . . . . . . . . . . . 17

 3.1   Features in Etherlords . . . . . . . . . . . . . .                  .   .   .   .   .   .   .   .   28
 3.2   Komponenten in Etherlords . . . . . . . . . . .                     .   .   .   .   .   .   .   .   28
 3.3   Features in Warcraft 3 . . . . . . . . . . . . . .                  .   .   .   .   .   .   .   .   32
 3.4   Komponenten in Warcraft 3 . . . . . . . . . . .                     .   .   .   .   .   .   .   .   32
 3.5   Zusammenfassung der Features der Spiele . . .                       .   .   .   .   .   .   .   .   36
 3.6   Zusammenfassung der Komponenten der Spiele                          .   .   .   .   .   .   .   .   37

 4.1   Wichtige Komponenten für Spiele . . . . . . . . . . . . . . . . 43

 7.1   Implementierte Komponenten . . . . . . . . . . . . . . . . . . 71

 A.1   Features in Sacred . . . . . . . . .    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   76
 A.2   Komponenten in Sacred . . . . . .       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   77
 A.3   Features in Siedler 5 . . . . . . . .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   82
 A.4   Komponenten in Siedler 5 . . . . .      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   82
 A.5   Features in Master of Orion 3 . . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   86
 A.6   Komponenten in Master of Orion 3        .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   87

                                    6
Ein von Gameengines unabhängiges User-Interface-System für PC Spiele
Kapitel 1

Einleitung

1.1     Motivation
Es gibt viele verschiedene Oberflächenbibliotheken die man verwenden kann
um Anwendungen zu erstellen. Sie eignen sich für die meisten der üblichen
Anwendungen die man auf dem PC findet. Textverarbeitungen, Tabellenkal-
kulation, Bildbearbeitungsprogramme, Editoren und Browser sind nur eini-
ge Beispiele die erfolgreich Gebrauch von diesen Bibliotheken machen. Sie
vereinfachen das Erstellen dieser Programme ungemein, da ansonsten vie-
le Komponenten wie Buttons, Auswahllisten und Menüs immer wieder neu
implementiert werden müssten.
    Es gibt jedoch Anwendungen die nicht von diesen Bibliotheken profi-
tieren, obwohl dies prinzipiell möglich wäre: Computerspiele. Das liegt vor
allem einmal daran, dass Spiele meist auf einer ganz eigenen Metapher der
Benutzeroberfläche basieren. Aber auch in ihnen gibt es sehr häufig viele
Elemente die sich von Spiel zu Spiel ähneln. Wenn man sich die heute übli-
chen PC-Spiele anschaut, so fällt einem schnell ins Auge, dass praktisch jedes
Komponenten wie Buttons, Auswahllisten usw. enthält. Aber diese werden
meist extra für das Spiel oder für eine Reihe von Spielen erstellt und greifen
nicht auf Bibliotheken zurück. Es stellt sich die Frage ob es nicht möglich
wäre eine solche Bibliothek zu entwickeln.

1.2     Ziele
Das Ziel dieser Arbeit ist es der Möglichkeit nach der Erstellung eines Ober-
flächensystem (im folgenden kurz UI-System vom englischen User Interface
System) für 3D-PC-Spiele nachzugehen und in der Folge ein solches prototy-
pisch zu entwickeln. Dieses soll sich für die Entwicklung einer breiten Auswahl

                                      7
Ein von Gameengines unabhängiges User-Interface-System für PC Spiele
KAPITEL 1. EINLEITUNG                                                      8

von PC-Spielen eignen und deren Entwicklungsaufwand verringern.
    Dabei soll nicht das komplette Interface der Spiele mit dem System er-
stellt werden. Das ist schon alleine deswegen nicht möglich, weil sich die
Spiele in ihrem Interface in der Gesamtbetrachtung so radikal unterschei-
den, dass eine sinnvolle Abstraktion unter Berücksichtigung aller Aspekte
ausgeschlossen ist. Gerade in den 3D-Anteilen des Interfaces sind die Un-
terschiede sehr ausgeprägt, während sich die 2D-Anteile meist zumindest in
ihrer Grundfunktion ähneln. Daher sollte das zu erstellende UI-System sich
auf diese 2D-Anteile konzentrieren und diese von den 3D-Anteilen trennen.
Es wird also eine Ergänzung zu bestehenden Gameengines darstellen und mit
diesen zusammenarbeiten.

1.3     Aufbau
Um ein UI-System für Spiele zu entwickeln sollte man zuerst einmal einen
Blick auf die vorhandenen Techniken werfen. Dabei gilt es die Frage zu beant-
worten was für Features und Komponenten vorhandene Frameworks für das
Erstellen von typischen Büroanwendungen üblicherweise zur Verfügung stel-
len und welche Techniken verwendet werden um diese Features zu realisieren.
Dies werden wir in Kapitel 2 tun.
    Der nächste Schritt wird sein, Spiele verschiedener Genres im Hinblick
auf die verwendeten Komponenten, Techniken und Features zu untersuchen.
Diese können dann mit denen vorhandener UI-Systeme verglichen werden,
und daraus dann die Unterschiede der Anforderungen an das neue System
abgeleitet werden. Die Ergebnisse dieser Untersuchungen werden in Kapitel 3
zusammen mit zwei Beispielhaften Untersuchungen vorgestellt, während sich
die restlichen Einzeluntersuchungen in Anhang A befinden.
    In Kapitel 4 wird schließlich ein System aufgebaut, welches die Spie-
leentwicklung mit einem System für die Erzeugung von Bedienoberflächen
unterstützt. Dazu werden zunächst die Anforderungen an ein solches Sys-
tem zusammengetragen, welche sich aus dem Kapitel 3 herleiten. Aus diesen
Anforderungen wird dann das Design entworfen, das dem System zugrunde
liegen wird. Als letztes wird dann eine exemplarische Implementation des
Systems beschrieben, die sich aus dem Design ergibt.
    Um die Möglichkeiten des Systems aufzuzeigen, werden in Kapitel 5 eini-
ge Demonstrationsprogramme vorgestellt, die während der Entwicklung des
Systems entstanden sind.
    Dann werden wir uns in Kapitel 6 überlegen in welche Richtungen man
weiter denken und wie Verbesserungen aussehen könnten und in Kapitel 7
abschließend eine Rückschau auf die Arbeit halten.
Ein von Gameengines unabhängiges User-Interface-System für PC Spiele
KAPITEL 1. EINLEITUNG                                                     9

1.4     Zur Sprache
Diese Arbeit ist in Deutsch geschrieben. Allerdings werden zur Beschreibung
von Oberflächenkomponenten und einigen anderen Konstrukten der Informa-
tik im folgenden die englischen Begriffe benutzt. So wird zum Beispiel nicht
von „Knöpfen“ sondern von „Buttons“, und nicht von „Nehme und lass fallen“
sondern von „Drag and Drop“ die Rede sein. Dies geschied zur Bequemlichkeit
des Lesers und des Autoren gleichermaßen.
Kapitel 2

Standard User Interfaces

Als ersten Schritt hin zu einem Framework für die Oberflächenentwicklung
von Spielen werden wir uns erst einmal ansehen, was ein bestehendes Fra-
mework für die allgemeinen Oberflächen gängiger Programme bietet. Wir
werden untersuchen, welche Techniken und Komponenten ein solches Fra-
mework zur Verfügung stellt und anhand dieser Informationen werden wir
dann in Kapitel 3 untersuchen können, welche Unterschiede bestehen zwi-
schen den Anforderungen gängiger Büroprogramme und den Anforderungen
von Spielen.
    Da es eine schier unglaubliche Anzahl von Frameworks für die Erstellung
von Benutzeroberflächen gibt, ist es unmöglich sie alle hier zu diskutieren
und zu analysieren. Beispiele dafür sind Qt (C++), Windows.Forms (C#)
und SWT/JFace (Java). Daher werden wir uns hier auf eines beschränken.
Wir sollten ein Framework wählen das ausgereift, weit verbreitet und gut
dokumentiert ist. Es sollte alle gängigen Programmtypen unterstützen damit
wir alle Features vorfinden die man in bekannten Programmen findet, denn
nur dann können wir davon ausgehen, das der daraus hergeleitete Standard
auch alle Kernpunkte umfasst.
    Ein weiterer Punkt ist für unsere Betrachtung von besonderer Wichtig-
keit: Das System sollte soweit wie möglich vom darunter liegenden Fenster-
system unabhängig sein. Das heißt, dass es seine Komponenten selbst imple-
mentieren sollte und nicht auf nativen Widgeds basieren darf. Diese Forde-
rung ist deswegen sehr wichtig, da auch die zu entwickelnde Bibliothek nicht
auf native Widgets wird zugreifen können. Schon allein die 3D-Darstellung
der Spiele und deren Fixierung auf hohe Performance verhindert die Verwen-
dung von vorhandenen Standardkomponenten, die ja üblicherweise in einem
Fenster und nicht im Vollbildmodus platziert werden.
    Im folgenden werden wir uns das System Swing[LEW+ 03] der Program-
miersprache Java ansehen. Sie erfüllt die oben formulierten Anforderungen

                                    10
KAPITEL 2. STANDARD USER INTERFACES                                       11

und dürfte damit eine gute Grundlage für unser System abgeben.

2.1     Komponenten
Ein UI-System besteht zunächst einmal aus einer Sammlung von wieder-
verwendbaren Komponenten die zusammengesetzt das Interface eines Pro-
gramms bilden. Die Komponenten die Swing bietet sind in Tabelle 2.1 auf-
geführt.

                      Komponente       Komponente
                      Labels           Pannels
                      Images           Windows
                      Buttons          Dialogs
                      ToggleButtons    Registers
                      CheckBoxes       ScrollPanes
                      RadioButtons     Menus
                      ScrollBars       Kontextmenus
                      Slider           Toolbars
                      ProgressBars     Tables
                      ChooseLists      Trees
                      ComboBoxes       Textfields
                      Spinners         StyledText

                    Tabelle 2.1: Komponenten in Swing

   Die meisten dieser Komponenten sollten dem Leser bekannt sein, daher
werden im folgenden nur sehr kurze Einzelbeschreibungen der Komponen-
ten gegeben. Für sehr viel detailliertere Informationen siehe zum Beispiel
[LEW+ 03].

Labels Eine wichtige Grundvoraussetzung der meisten Anwendungen be-
steht darin statische Texte darstellen zu können. Ein Label tut genau das, es
stellt Text dar. Man kann den Text beliebig formatieren indem man ihn mit-
tels HTML dekoriert. So sind verschiedene Textgrößen, Farben und Formen
möglich. Labels reagieren normalerweise nicht auf Aktionen des Benutzers.
In Swing ist ein Label darüber hinaus auch in der Lage Bilder darzustellen.

Images Neben Texten müssen auch Bilder dargestellt werden. Dabei kann
ein Bild sich aus einzelnen Pixelinformationen zusammensetzen die z.B. aus
KAPITEL 2. STANDARD USER INTERFACES                                        12

einer PNG-Datei stammen, oder kann auch dynamisch vom Programm er-
zeugt werden. Images reagieren normalerweise nicht auf Aktionen des Benut-
zers und werden in Swing ebenfalls durch Labels realisiert.

Buttons Buttons dienen normalerweise lediglich dazu eine Aktion auszu-
lösen, wenn mit der Maus auf sie geklickt wird. Sie haben verschiedene Zu-
stände, je nachdem ob sich die Maus über ihnen befindet oder vielleicht sogar
gerade eine Maustaste gedrückt wird. Diese Zustände haben unterschiedliche
grafische Repräsentationen.

ToggleButton Im Prinzip ein Button der jedoch gedrückt bleibt, wenn
man auf ihn geklickt hat, und nicht automatisch in seinen Ursprungszustand
zurückkehrt. Erst ein zweiter Klick läßt ihn in seinen Ursprungszustand zu-
rückkehren. Auf diese Weise dient er nicht nur dem Auslösen einer Aktion
sondern kann gleichzeitig auch noch einen binären Zustand anzeigen.

Checkboxes Eine Checkbox ist einem ToggleButton sehr ähnlich und un-
terscheidet sich von diesem lediglich im Erscheinungsbild. Sie dient meist der
Auswahl, ob eine Option aktiviert werden soll oder nicht, löst aber nur in
seltenen Fällen eine Aktion aus.

RadioButtons Ein RadioButton steht niemals alleine für sich, es arbeiten
immer mehrere zusammen. Im Prinzip sind es mehrere Checkboxes von denen
immer nur genau eine aktiviert ist. Wenn man zwischen wenigen verschiede-
nen Alternativen zu wählen hat, bieten sich RadioButtons an. Für sehr viele
Auswahlpunkte sind sie nicht ganz so geeignet, da sie dann relativ viel Platz
verbrauchen.

ScrollBars ScrollBars bestehen meist aus zwei Buttons die entweder hori-
zontal oder vertikal angeordnet sind, und einer dritten Komponente die per
DnD zwischen ihnen bewegt werden kann. Der Druck auf einen der Buttons
hat zur Folge, dass die dritte Komponente auf ihn zu bewegt wird. Eine
ScrollBar wird normalerweise dazu benutzt, Teile des User Interfaces sicht-
bar zu machen die vorher verborgen waren und dafür andere unsichtbar zu
machen.
   Man findet diese Komponente selten für sich alleine sondern meist in
Verbindung mit anderen wie ComboBoxes oder ScrollPanes.

Slider Um einen Wert innerhalb bestimmter Grenzen zu setzen wird häufig
ein Slider verwendet. Es ist im wesentlichen eine horizontal oder vertikal
KAPITEL 2. STANDARD USER INTERFACES                                         13

zwischen zwei Extrema bewegbare Komponente. Der Benutzer bewegt diese
durch eine Drag and Drop Geste mit der Maus.

ProgressBars Wie weit eine länger dauernde Aktion wie das Laden eines
Bildes fortgeschritten ist, wird oft durch eine ProgressBar dargestellt. Es
zeigt einen Fortschritt als Balken an, welcher je nach Fortschritt größer wird.
Er ändert seinen Zustand programmgesteuert und kann nicht vom Benutzer
editiert werden.

ChooseLists Um eine Auswahl zu treffen bieten sich neben den Radiobut-
tons auch ChooseLists an. Hier sind, meist textuell, mehrere Wahlmöglich-
keiten aufgelistet, von denen eine oder, je nach Einstellung, auch mehrere
Elemente gewählt werden können. Wenn mehr Wahlmöglichkeiten zur Ver-
fügung stehen, als die Komponente auf einmal darstellen kann, wird eine
ScrollBar sichtbar, um zu den verschiedenen Möglichkeiten blättern zu kön-
nen. Damit verbrauchen sie bei großen Auswahlmöglichkeiten nicht so viel
Platz wie viele Check- oder Radiobuttons.
    Eine Liste kann aber auch andere Elemente aufnehmen als Texte. So kann
man zwischen Bildern wählen oder auch zwischen komplexeren Elementen.

Comboboxes Eine Combobox ist eine Kombination aus einem Textfield,
einem Button und einer ChooseList. Die Chooselist ist normalerweise un-
sichtbar und wird nur eingeblendet wenn in das Textfield geschrieben oder
der Button gedrückt wird. Dann wird sie über andere Elemente geblendet
und verschwindet wieder wenn eine Auswahl getroffen wurde. Auf diese Wei-
se kann man aus vielen Alternativen wählen und braucht nur relativ wenig
Platz auf der Oberfläche für die Komponente. Allerdings ist eine Mehrfach-
auswahl wie bei einer regulären Chooselist so kaum möglich.

Spinners Die Platzsparenste aller Listenkomponenten ist der Spinner. Er
zeigt immer nur genau eine der möglichen Auswahlen an, und zwar den ge-
wählten Eintrag. Mit zwei Buttons wird der Eintrag gegen den nächsten
bzw. den vorigen ausgetauscht. Auch hier können neben Texten auch andere
Einträge gewählt werden wie z.B. Bilder oder Zahlen.

Pannels Pannels dienen im Grunde nur dazu andere Elemente zu grup-
pieren. Ein Panel selbst hat normalerweise keine graphische Repräsentation
sondern sorgt nur dafür dass die Unterkomponenten dargestellt werden.
KAPITEL 2. STANDARD USER INTERFACES                                        14

Windows Ein Window hat eine Titelleiste mit verschiedenen Buttons.
Man kann es mit der Maus auf dem Bildschirm verschieben indem man die
Titelleiste verschiebt, und mit dem Buttons kann es verkleinert, vergrößert
oder geschlossen werden. Es dient der Zusammenfassung anderer Komponen-
ten und als Rahmen für die meisten Programme. Die Funktionalität wird vom
Betriebssystem zur Verfügung gestellt und dieses ist auch für die Darstellung
verantwortlich, Swing bietet aber auch eine rein javabasierte Lösung für Un-
terfenster an. Ein Window hat auch noch weitere vordefinierte Andockstellen
für Komponenten wie Menüs oder Toolleisten.

Dialogs Eine besondere Art Window sind die Dialogs. Dies sind meist klei-
ne Fenster innerhalb eines Programms die ein Stück der Oberfläche bündeln
damit der Benutzer eine oder mehrere Auswahlen treffen kann. Ein Beispiel
sind die Datei-Öffnen-Dialoge, die verschiedene Komponenten enthalten um
eine Datei zu finden und dann zu öffnen.
    Modale Dialoge sind Dialoge, die alle anderen Komponenten der Anwen-
dung blockieren bis sie geschlossen werden, und die bis zu diesem Zeitpunkt
im Vordergrund stehen. Benutzt wird dies, wenn eine Auswahl des Benutzers
zwingend erforderlich ist, bevor das Programm weiter arbeiten kann.
    Swing definiert eine ganze Reihe Dialoge für spezifische Aufgaben wie das
Öffnen oder Schließen einer Datei, die in unserem Zusammenhang aber ohne
große Bedeutung sind.

Registers Um Platz zu sparen und die Oberfläche übersichtlicher zu ge-
stalten werden Registers eingesetzt. Ein Register ist ein Container für andere
Komponenten, wobei von mehreren Registerseiten immer nur eine komplett
dargestellt wird, die anderen sind bis auf einen Button verdeckt. Ein Klick
auf den Button holt dann die entsprechende Seite nach vorne und verdeckt
damit alle anderen. Es handelt sich also um die Umsetzung von Karteireitern
in Software.

Scrollpanes Ist ein Panel oder eine andere Komponente zu groß um kom-
plett dargestellt zu werden, werden oft ScrollBars eingeblendet um den Rest
der Komponente sichtbar machen zu können. Diese Funktionalität wird durch
ein Scrollpane zur Verfügung gestellt, welches eine Komponente aufnimmt
und die Leisten dann einblendet, wenn die Komponente zu groß für eine
komplette Darstellung ist.

Menus Menus können eine komplexe Angelegenheit sein. Bei den meisten
Anwendungen findet man ein Menu am oberen Rand. Es gliedert sich in
KAPITEL 2. STANDARD USER INTERFACES                                       15

Hauptpunkte welche, wenn angeklickt, Unterpunkte offenbaren. Diese kön-
nen wiederum Unterpunkte enthalten und so weiter, bis man schließlich an
der untersten Ebene ankommt, deren Punkte dann wie ein Button Aktionen
auslösen. Die Menupunkte werden üblicherweise durch Texte dargestellt und
können weitere Attribute wie zum Beispiel ein Icon (kleines Bild) oder einen
Hinweis auf den Hotkey für die Aktion beinhalten. Auch gibt es rare Fälle
in denen ein Menupunkt nicht nur wie ein Button funktioniert, sondern wie
eine Checkbox.

Kontextmenus Es gibt Menus in verschiedenen Spielarten. Was man sehr
häufig findet ist das so genannte Kontextmenu. Es unterscheidet sich von
anderen Menus dadurch, das es standardmäßig unsichtbar ist. Erst ein (ge-
wöhnlicherweise) Rechtsklick auf eine Komponente bringt ein Kontextmenü
zum Vorschein. Dieses enthält dann Einträge, welche mit der angeklickten
Komponente assoziiert sind.

Toolbars Toolbars sind Container für andere Komponenten, meist für But-
tons, man findet aber auch andere kleine Komponenten wie zum Beispiel
Comboboxes in ihnen. Die Toolbars ermöglichen einen schnellen Zugang zu
häufig gebrauchten Befehlen, so dass man sich nicht jedes mal durch die
komplexen Menus arbeiten muss. Heutzutage sind die Toolbars meist konfi-
gurierbar, so dass der Benutzer sie nach Belieben gestalten kann. Auch kann
man sie meist verschieben, so dass sie da liegen wo der Benutzer es am nütz-
lichsten findet.

Tables Tabellen können extrem komplexe und mächtige Komponenten sein.
Sie bestehen grundsätzlich aus einzelnen Spalten. Dabei kann jede einzelne
Spalte ihren eigenen Datentyp enthalten. Es kann also Spalten geben, die
Strings enthalten und solche die mit Bildern arbeiten. Des weiteren hat je-
de Spalte Informationen über ihre Breite, ihre Überschrift und einiges mehr.
Vor allem kann auch jede Spalte definieren, wie ihre Inhalte gerendert werden
sollen und wie sie zu editieren sind.
    Zu einer bestehenden Tabelle können nun Zeilen hinzugefügt werden. Da-
bei hat jede Zeile genau die Felder die von den einzelnen Spalten definiert
werden. Jede Zelle benutzt die in den Spalten definierten Renderer und Edi-
toren.

Trees Um hierarchische Daten wie zum Beispiel das Dateisystem mit seinen
Ordnern und Dateien anzuzeigen eignen sich Trees. Häufig lassen sich die
KAPITEL 2. STANDARD USER INTERFACES                                      16

Einträge ein- und ausklappen um die untergeordneten Elemente zu verbergen
oder anzuzeigen.
    Neben der Anzeige von kurzen Texten werden oft auch kleine Symbole
oder sogar noch weitere Komponenten angezeigt. Dafür kann jeder Knotentyp
seinen eigenen Renderer und Editor definieren.

Textfields Eingabefelder stellen Texte dar, allerdings dynamische. Wenn
ein Eingabefeld den Fokus hat, empfängt es Tasterturnachrichten und stellt
einen Cursor dar. Der User kann hier nun ein- oder auch mehrzeiligen Text
eingeben. Es gibt es einfache Eingabefelder und solche die mehrzeiligen for-
matierten Text darstellen. Bei mehrzeiligen Eingabefeldern erscheint eine
Scrollleiste wenn so viel Text eingegeben wurde, dass nicht alles auf einmal
sichtbar sein kann.
    Einige Eingabefelder nehmen auch nur bestimmte Zeichen an (z.B. nur
Zahlen) oder stellen sie anders dar (z.B. als Sterne in einem Passwortfeld).

Styled Text In Swing gibt es auch sehr mächtige Textkomponenten welche
formatierten Text darstellen und auch in der Lage sind Bilder und andere
Komponenten in den Text einzubetten. Damit lassen sich Renderer für Web-
browser genauso herstellen wie etwa ein Textverarbeitungsprogramm. Diese
Flexibilität geht natürlich auch mit einer großen Komplexitität einher.

2.2     Features
Neben den Komponenten aus denen sich ein UI-System zusammen setzt hat
es auch allgemeine Merkmale, die sich vertikal durch alle Komponenten zie-
hen und damit wesentlich sein grundsätzliches Aussehen und Verhalten be-
stimmen. Wichtige solche allgemeine Merkmale von Swing werden in Tabelle
2.2 aufgeführt.
    Da auch diese Features zum größten Teil bekannt sein sollten, werden sie
nur kurz eingeführt. Für mehr Informationen sei wiederum auf die Literatur
verwiesen.

Tooltips Wenn man in bekannten Programmen mit der Maus einige Zeit
über einer Komponente einige Zeit bewegungslos verharrt, dann erscheint oft
ein kleiner Text, der die Funktion der Komponente beschreibt. Diese kleinen
Hilfstexte nennt man Tooltips.
KAPITEL 2. STANDARD USER INTERFACES                                       17

                              Feature
                              Tooltips
                              Hotkeys
                              Focus
                              Drag and Drop
                              Cut and Paste
                              Undo/Redo
                              Layout Manager
                              Look and Feel

                       Tabelle 2.2: Features in Swing

Hotkeys Verschiedene Komponenten können Ereignisse auslösen wenn man
zum Beispiel mit der Maus auf sie klickt. Aber wenn man alle Aktionen mit
der Maus kontrollieren will, verliert man oft viel Zeit. Um die Arbeit zu be-
schleunigen definiert man Hotkeys, also Tasten auf der Tastertur, die dann
die selbe Aktion auslösen, als wenn man die Maus benutzt hätte.

Focus Wenn auf der Oberfläche mehrere Buttons vorhanden sind, welcher
wird durch einen Druck auf Return betätigt? Bei mehreren Texteingabefel-
dern, in welches wird momentan getippt? Kurz, welche Komponente emp-
fängt zu einem gegebenen Zeitpunkt Tastertureingaben? Dies regelt gewöhn-
licherweise ein Focussystem, wobei immer nur eine Komponente den Focus
hat und Tastertureingaben empfängt. Dabei ist natürlich zu beachten, dass
einige besondere Eingaben, insbesondere Hotkeys, auch dann eine Aktion
auslösen müssen, wenn die entsprechende Komponente den Focus nicht hat.

Drag and Drop Wenn man mit der Maus ein Icon vom Dateiexplorer
in den Mülleimer verschiebt und daraufhin die zugehörige Datei gelöscht
wird, wenn man einen Text auswählt und ihn an eine andere Stelle im Do-
kument verschiebt, wenn man ein Bild vom Bildbearbeitungsprogramm in
ein Textdokument verschiebt, dann ist dort die Drag and Drop (DnD) des
unterliegenden Systems am Werk. Generell kann man hiermit innerhalb eines
Programms oder auch zwischen verschiedenen Applikationen Daten mit der
Maus hin und her verschieben.

Cut and Paste Die Möglichkeit einen Text mit der Maus oder der Taster-
tur zu markieren, dann auszuschneiden und an anderer Stelle wieder einzufü-
gen wird als Cut and Paste bezeichnet. Häufig ist diese Funktionalität auch
KAPITEL 2. STANDARD USER INTERFACES                                      18

programmübergreifend zu nutzen, so dass man im einen auschneidet und im
anderen einfügt. Auch andere Ressourcen wie zum Beispiel Bilder lassen sich
so in manchen Programmen transferieren.

Undo/Redo Nicht jede Änderung die man bei seiner Arbeit an einem
Dokument macht entspricht den Erwartungen. Deswegen erwartet man ei-
ne Funktionalität um Änderungen rückgängig zu machen und gegebenenfalls
sogar das Rückgängigmachen zu widerrufen. Diese Funktionalität wird Un-
do/Redo genannt.

Layout Manager Komponenten in einer Anwendung sind auf bestimmte
Weise angeordnet. Es gibt verschiedene Methoden um diese Anordnung fest-
zulegen. Die einfachste ist, jeder Komponente eine Position innerhalb ihrer
Zeichenfläche zuzuordnen und sie dort zu zeichnen. Ein Nachteil der damit
verbunden ist, ist, dass wenn die Fläche zum Beispiel verkleinert wird, das
Element unter Umständen teilweise oder ganz ausserhalb der Fläche liegt
und damit quasi verschwindet. Um das zu verhindern gibt es in modernen
UI-Systemen Layout Manager. Statt einer Komponente eine feste Position
zuzuordnen kann jeder Container einen Layout Manager definieren der für die
Anordnung der Komponenten verantwortlich ist. Ein möglicher Layout Ma-
nager würde zum Beispiel alle Komponenten einfach hintereinander darstel-
len, während ein anderer sie vielleicht tabellenartig anordnen würde. Durch
dieses intelligente Anordnungssystem kann die Oberfläche zum Beispiel auf
Größenänderungen flexibel reagieren.

Look and Feel Eine nicht ganz so häufig anzutreffende Eigenschaft bei
UI-Systemen ist ein dynamisches Look and Feel. Dabei ist das System in der
Lage, sein Aussehen dynamisch zu verändern. So kann ein Button unter Win-
dows anders aussehen als unter Mac OS und damit kann sich das Programm
besser in das darunter liegende System integrieren.

2.3     Architektur
Nun wissen wir, welche Komponenten und Features Swing bietet. Als nächs-
tes gilt es, eine ungefähre Vorstellung davon zu bekommen wie diese Fähig-
keiten realisiert werden. Dafür werfen wir einen kurzen Blick auf die Archi-
tektur von Swing, um daraus für unser zu entwickelndes System zu lernen.
Um die Diskussion kurz zu halten werden wir die Architektur mit Hilfe von
bekannten Design Patterns[GHJV95, Coo98] beschreiben.
KAPITEL 2. STANDARD USER INTERFACES                                                         19

Komponentenaufbau Swing baut seine Komponenten nach einer Model-
View-Controller Architektur[KP88] auf, um seine Komponenten flexibel und
erweiterbar zu gestalten.
    Dabei wird ein leicht vereinfachter Aufbau verwendet, das Model-Delegate
Modell [LEW+ 03](S. 13-16), oder auch Model-View Modell, wie wir es im
Folgenden nennen werden. In diesem wird das View und der Controller in
einer Klasse zusammengefasst, so dass eine Klasse weniger implementiert
werden muss. Dies geschieht aus der Erfahrung, dass View und Controller
so eng mit einander verknüpft sind, dass ein Austausch des einen Teils fast
immer auch einen Austausch des anderen erforderlich macht, eine Trennung
also kaum einen Vorteil bringt.

                                                   Wird vom Entwickler instantiiert
                                     Button        und enthält den visuellen Zustand
                                                   des Buttons (Position, Größe usw.).

                                   referenziert

           ButtonModel                               ButtonUI

         Enthält den internen Zustand             Nutzt die Zustandsinformationen
         des Buttons, also ob sich die            des Buttons um diesen darzustellen.
         Maus über ihm befindet, er               Kann ausgetauscht werden um das
         gedrückt ist und anderes.                Erscheinungsbild des Buttons zu ändern.

Abbildung 2.1: Aufbau der Komponenten in Swing am Beispiel eines Buttons

    Konkret benötig werden für eine Komponente meist drei Klassen. Die ers-
te Klasse ist die eigentliche Komponente. Diese wird später vom Anwendungs-
entwickler instantiiert. Sie enthält den Zustand der das visuelle Erscheinungs-
bild der Komponente beschreibt. In dieser Komponentenklasse wird immer
ein UI-Delegate referenziert welches für die Darstellung und die Interaktion
mit dem Benutzer zuständig ist. Es ist normalerweise zustandslos und nutzt
die Informationen aus der Komponentenklasse in einer eigenen Darstellungs-
routine. Auf diese Weise kann das Delegate ausgetauscht werden und das
neue Delegate benutzt die Informationen des alten. Durch einen Austausch
dieser Klasse durch eine Kompatible läßt sich das Aussehen der Komponente
radikal verändern. Die dritte Klasse wird ebenfalls von der Komponenten-
klasse referenziert, es ist das Modell. Dieses enthält den internen Zustand
der Komponente der von der Darstellung unabhängig ist. Auch das Modell
läßt sich austauschen. Es können sogar zwei Komponenten dasselbe Modell
KAPITEL 2. STANDARD USER INTERFACES                                       20

benutzen, wodurch zwei Ansichen ein und derselben Daten erzeugt werden.
Eine Änderung an den Daten wirkt sich dann direkt auf beide Komponenten
aus.
    Nicht jede Komponente besitzt ein Modell und es gibt auch keine Modell-
Superklasse, die Modelle sind zu speziell, als das es irgendwelche Gemein-
samkeiten gäbe. Daher besitzt auch die Superklasse der Komponenten keine
Referenz auf ein Modell, sondern dies wird von den konkreten Komponenten
erledigt.
    Abbildung 2.1 verdeutlicht diesen Aufbau anhand eines Buttons in Swing.

Kommunikation Bei der Frage, wie verschiedene Komponenten kommu-
nizieren, greift Swing auf das Observer-Pattern zurück. Dabei kann sich eine
Komponente bei einer anderen registrieren lassen. Diese ruft dann bei allen
registrierten Komponenten eine spezielle Methode auf, sobald ein Ereignis
eintritt. Dieser Methode wird noch ein Event-Objekt mitgegeben, das über
die genaue Art des Ereignisses informiert. Wie die so informierten Objekte
dann auf dieses Ereignis reagieren, liegt bei ihnen.
    Unterschieden wird hier zwischen Lowlevel-Ereignissen, das sind zum Bei-
spiel Mausklicks und Tasterturanschläge, und Highlevel-Ereignissen wie zum
Beispiel das Drücken eines Buttons. Die Lowlevel-Ereignisse werden vom Be-
triebssystem generiert und vom System an die betreffenen Komponenten wei-
tergeleitet, während die Highlevel-Ereignisse von den Komponenten generiert
werden.
    Auch das Modell einer Komponente wird über den Observer-Mechanismus
mit der Komponente verbunden, indem sich die Komponente bei dem Modell
als Listener registriert. Durch diese lose Kopplung muss das Modell nichts
über die Komponente wissen. Das ist sehr wichtig, denn nur so ist es möglich,
dasselbe Modell für unterschiedliche Komponenten zu verwenden. Durch die-
se Wiederverwendbarkeit der Modelle wird die Erweiterbarkeit des Systems
erleichtert. Wenn eine neue Komponente erstellt wird, kann der Entwickler
unter Umständen ein bereits vorhandenes Modell verwenden, was den Ent-
wicklungsaufwand deutlich reduziert.

Look and Feel Ein wesentlicher Aspekt in der Architektur von Swing ist
das austauschbare Look and Feel. Das Ziel ist, dass sich das Aussehen und die
Bedienung des Programms an das System anpasst auf dem es läuft. So soll
sich das Aussehen einer Anwendung ändern, je nachdem ob es unter Windows
oder unter MacOS läuft. Da Swing nicht auf native Widgets zurückgreift um
diese Funktionalität zu erreichten muss Swing das Aussehen und Verhalten
KAPITEL 2. STANDARD USER INTERFACES                                               21

des darunter liegenden Systems simulieren1 . Der Komponentenaufbau liefert
für diese Simulierung den Grundbaustein, da sich das Delegate einer Kom-
ponente je nach System austauschen läßt, womit sich dessen Aussehen und
Verhalten an das darunter liegende System anpassen lassen.
    Natürlich muss das Austauschen der Delegates quasi automatisch ablau-
fen. Der Entwickler darf nicht dazu gezwungen sein, für jede Komponenten-
instanz festzulegen welches Delegate es benutzt. Vielmehr ist es sinnvoll an
einer Stelle im Programm festzulegen, welches Design bzw. welches Look and
Feel verwendet werden soll, und alle Komponenten passen sich dann an dieses
an. Im Diagram 2.2 wird dieser (sehr komplexe) Mechanismus am Beispiel
eines Buttons unter Windows vereinfacht dargestellt.
    Am Anfang des Programms wird eine LookAndFeel-Klasse instantiiert.
Diese legt eine UIDefaults-Instanz (im Diagram: def:UIDefaults) an. Im Dia-
gram ist nun zu sehen:

   1. Ein Button button1 wird instantiiert.

   2. Der Button fragt den UIManager nach einem Delegate.

   3. Der UIManager leitet die Anfrage an die UIDefaults weiter.

   4. Die UIDefaults fragen den Button nach seiner UIClassID. Das ist eine
      ID, die eindeutig festlegt welche Art von Delegate zu der Klasse ge-
      hört. Im Beispiel antwortet der Button, dass er ein ButtonUI-Delegate
      benötigt.

   5. Die UIDefaults bestimmen, welche Klasse zu der entsprechenden ID ge-
      hört und erzeugen per Reflexion eine entsprechende Delegate-Instanz
      button1ui. Diese ist platformspezifisch, da die Defaults ja vor der In-
      stantiierung von dem gewählten Look and Feel festgelegt wurden.

   6. Das Delegate button1ui wird an den ursprünglichen Button button1
      zurück gesendet. Dieser installiert ihn bei sich, behält also eine Referenz
      um später Anfragen an das Delegate weitersenden zu können.

   7. Als letztes meldet sich der Button button1 noch beim Delegate but-
      ton1ui an, damit dieses Ereignislistener registrieren kann und so auf
      Zustandsveränderungen des Buttons reagieren kann.

  1
    Auf die Vor- und Nachteile diesen Systems soll hier nicht eingegangen werden. Im
Internet wurden und werden über dieses Thema ähnlich hitzige Diskussionen geführt wie
über die Vorteile von Windows gegenüber Linux und umgekehrt.
KAPITEL 2. STANDARD USER INTERFACES                                                                                                                       22

          button1:Button                    UIManager                    def:UIDefaults                   WinButtonUI             button1ui:WinButtonUI

                           getUI(button1)
                                                        getUI(button1)

                           getUIClassID()

                                                   ButtonUI:UIClassID
                                                                                          createUI(button1)

                             button1ui

                                                                                                                    installUI(button1)

              Abbildung 2.2: Beispiel einer Delegate-Installation in Swing

   Auf diese Weise muss ein Programmentwickler lediglich am Anfang des
Programmlaufs festlegen, welche Delegateklassen zu welchen IDs gehören,
und kann dann seine Komponenten unabhängig von den verwendeten Dele-
gates instantiieren2 .
   Der komplette Austausch der Views aller Komponenten ist zwar der
mächtigste, gleichzeitig aber auch der komplizierteste Mechanismus, den es
in Swing gibt um das Look and Feel der Oberfläche anzupassen. Darüber
hinaus gibt es noch eine weitere Möglichkeit die weniger Arbeit auf Seiten
des Anwendungsentwicklers erfordert.
   In den UIDefaults sind nicht nur die Views für die einzelnen Kompo-
nenten festgelegt, sondern auch Parameter, die diese nutzen. So legt man in
den UIDefaults fest, welche Schrifttypen die Buttons verwenden, in welchen
Farben die Ränder dargestellt werden und viele andere Eigenschaften der
Komponenten. So kann man in begrenztem Umfang auch ohne die komplette
Neuerstellung der Views die Oberfläche seines Programms anpassen. Dabei
bewegt man sich aber natürlich immer in den Grenzen der vom Komponen-
tenentwickler vorhergesehenen Anpassungsmöglichkeiten.

Grafikausgaben Ein weiterer sehr wichtiger Teil eines UI-Systems besteht
in der Art und Weise in der die Komponenten auf dem Bildschirm dargestellt
   2
     Der ganze Vorgang ist noch etwas komplizierter als die obere Darstellung dies vermit-
telt. Das liegt vor allem daran, dass das System sogar erlaubt das Look and Feel während
des Programmlaufs zu verändern. Sogar nachdem alle Komponenten instantiiert wurden
und auf dem Bildschirm sichtbar sind, kann das Look and Feel verändert werden, und alle
Komponenten passen sich an. Da dies aber, wie wir später sehen werden, für uns nicht
besonders wichtig ist, genügt hier diese vereinfachte Darstellung.
KAPITEL 2. STANDARD USER INTERFACES                                      23

werden. Das ist deswegen von so hoher Bedeutung, weil die Darstellung ein
sehr Zeitintensiver Vorgang ist und daher optimiert werden sollte.
    In Swing besitzt jedes Komponenten-Delegate eine Rendermethode, die
paint-Methode. Diese Methoden werden aber nicht einfach jeden Frame re-
kursiv aufgerufen, der Aufwand wäre bei weitem zu hoch. Um den Aufwand
zu veringern, besitzt jede Komponente auch eine repaint-Methode, die ein
Rechteck als Parameter übernimmt. Wenn diese Methode aufgerufen wird,
wird nur der Teil der Komponente neu gezeichnet, der durch das Rechteck
angegeben ist.
    Um zu bestimmen, welche Bildschirmausschnitte neu gezeichnet werden
müssen und welche nicht, gibt es einen globalen Repaint Manager. Wenn
eine Komponente ein Ereignis empfängt und ihr visuelles Erscheinungsbild
sich ändert, bestimmt sie, welche Bildschirmausschnitte neu gezeichnet wer-
den müssen und welche nicht. Ein Beispiel wäre ein Fenster, das verschoben
wird. Neu gezeichnet werden müssen dann der Ausschnitt, auf den das Fens-
ter verschoben wird, und das Rechteck, den es vorher bedeckt hat. Diese
Rechtecke werden dann dem Repaint Manager übergeben. Dieser verrechnet
alle Änderungen, die er innerhalb eines Frames bekommt, und zeichnet dann
eben diese Regionen neu. Anschließen markiert der Manager die Regionen
und Komponenten als gezeichnet, so dass sie nicht wieder gezeichnet werden
müssen, bis sie ihren Zustand erneut ändern.
    Um die Arbeit des Managers weiter zu beschleunigen, besitzt jede Kom-
ponente ein spezielles Attribut, welches festlegt ob eine Komponente ihre
komplette Fläche neu zeichnet (wie ein rechteckiger Button) oder nur einen
Teil davon (wie ein runder Button, der die Ecken nicht ausmalt). Dieses At-
tribut kann der Manager benutzen um die Zeichenvorgänge zu optimieren.
Wenn eine Komponente nämlich ihre Zeichenfläche komplett ausfüllt, müssen
Komponenten, die sich hinter ihr befinden nicht gezeichnet werden.
    Es sollten noch zwei Dinge angemerkt werden: als erstes verwendet jede
Komponente Double-Buffering um umschönes Flackern zu verhindern. Aber
sehr viel grundlegender ist, dass der ganze Zeichenvorgang asynchron in meh-
reren Threads abläuft. Der Repaint Manager läuft in einem eigenen Thread
und die Komponenten müssen ihm melden, wenn sie neu gezeichnet werden
müssen. Es ist also nicht garantiert, dass das Neuzeichnen sofort geschieht,
je nach Auslastung des Systems kann dies noch ein wenig dauern.
Kapitel 3

User Interfaces in
Computerspielen

Computerspiele bringen im Allgemeinen sehr individuelle Benutzeroberflä-
chen mit sich. Es gibt kaum zwei Spiele, die mit gleichartigen Buttons ausge-
stattet sind, kaum zwei Spiele, die ein irgendwie standardmäßiges Aussehen
haben. Jedes versucht, so individuell wie möglich, so interessant wie irgend
möglich zu sein. Unter anderem dadurch wird verhindert, dass die Entwickler
auf herkömmliche UI-Systeme zurückgreifen können, da mit diesen erstellten
Benutzerinterfaces alle denselben Flair haben, sich in der Benutzung ähneln
und den Eindruck machen, als hätten sie alle einen einzigen Ursprung.
    In diesem Kapitel werden nun die Ergebnisse eines Vergleiches der Ober-
flächen einiger sehr verschiedener Spiele mit denen anderer Programme prä-
sentiert. Die Möglichkeiten der Oberflächen anderer Programme wurden da-
bei in Kapitel 2 bereits dargelegt durch die Analyse, was ein heutiges UI-
System bietet. Dieser Vergleich wird dazu beitragen, die Unterschiede und
Gemeinsamkeiten der Programmgattungen herauszuarbeiten. Das wird wie-
derum die Grundlage bilden um die Anforderungen an das Framework zu
definieren.
    Insgesamt wurden fünf verschiedene Spiele untersucht. In diesem Kapitel
finden sich zwei dieser Analysen, die zeigen, auf welche Weise die Untersu-
chung durchgeführt wurde. Weitere drei finden sich in Anhang A.
    Aufgrund des dynamischen Charakters von Spielen können die Ergebnis-
se wohl nur dann genau nachvollzogen werden, wenn die Spiele vorliegen.
Von einigen Spielen existieren Demoversionen, die kostenlos heruntergeladen
werden können und mit deren Hilfe man einen Eindruck der Spiele gewin-
nen kann. Aus diesem Grund sind bei den Einzelanalysen auch immer die
Webadressen der Hersteller aufgeführt.
    Die beiden Spiele, deren Analysen sich in diesem Kapitel befinden, wer-

                                     24
KAPITEL 3. USER INTERFACES IN COMPUTERSPIELEN                             25

den auch in Kapitel 5 als Grundlage für die Demonstrationsprogramme des
UI-Systems verwendet, so dass sich dort einige Screenshots befinden. Um
einen ungefähren Eindruck auch der anderen Spiele zu geben finden sich
noch einige Screenshots in Anhang B, wobei diese natürlich die dynamischen
Eigenschaften nicht deutlich machen können.

3.1        Spielanalysensystematik
Eine Analyse der Spiele muss hier stichprobenartig ausfallen und kann nicht
umfassend sein, da alleine die verschiedenen Genres eine lange Liste darstel-
len. Daher werden wir hier nur eine kleine Auswahl von Spielen untersuchen.
Wir werden uns dabei auf Spiele konzentrieren, die besonders intensiv von der
Maussteuerung und der WIMP1 -Metapher Gebrauch machen, da diese Spie-
le am stärksten von einem Framework, wie es hier geplant wird, profitieren
würden.
    Es wird bei der Auswahl der Spiele darauf Wert gelegt, dass erstens keine
zwei Spiele eines Herstellers gezeigt werden, da dieser unter Umständen ein
eigenes UI-Framework nutzen würde und der Informationsgewinn so gering
wäre. Und zweitens wird darauf Wert gelegt, dass die Spiele aus unterschied-
lichen Genres stammen, um eine möglichst hohe Abdeckung der Spielevielfalt
zu erreichen.
    Die Analyse wurde nach einem standardmäßigen Muster durchgeführt.
Dieses Muster wurde deswegen verwandt, damit die Einzelanalysen besser
verglichen und leichter Schlussfolgerungen aus ihnen gezogen werden können.
Folgende Schritte werden der Reihe nach durchlaufen:

  1. Allgemeines Verhalten des Spieles. Wie reagiert es auf die Veränderung
     der Bildschirmauflösung? Gibt es einen Fenstermodus? Was ist mit
     Animationen, Sounds und 3D-Effekten?

  2. Features im Spiel. Welche der Features aus Abschnitt 2.2 finden sich in
     dem Spiel wieder? Welche nicht?

  3. Komponenten im Spiel. Hier wird geklärt, welche Komponenten aus
     Abschnitt 2.1 sich im Spiel finden, die mit solchen aus anderen An-
     wendungen größtenteils identisch sind. Weiter wird untersucht, welche
     besonderen, vom Standard abweichenden, Komponenten es gibt und
     wie diese aussehen, wie sie zu bedienen sind und wie sie sich verhalten.

  1
      W indow I con M enu P ointer
KAPITEL 3. USER INTERFACES IN COMPUTERSPIELEN                                26

3.2     Kartentaktikspiel: Etherlords
    Bei dem Spiel Etherlords handelt       Name          Etherlords
es sich um Taktikspiel, welches auf        Genre         Kartentaktikspiel
ein Kartensystem setzt, um Duelle          Entwickler Nival
zwischen zwei Opponenten auszutra-         Publisher     Fishtank
gen. Gewisse strategische Komponen- Erschienen 2001
ten kommen durch eine Karte, auf           Homepage www.etherlords.com
der gespielt wird, hinzu. Obwohl das
Spielprinzip relativ einfach ist, hat es ein sehr komplexes Interface, beson-
ders in den Optionsmenus, da sich jeder Spieler seinen eigenen Charakter
mit seinen eigenen Karten erstellen kann, um größtmögliche taktische Spiel-
tiefe zu erzeugen. Im Gegensatz dazu ist das eigentliche Duell mit einem sehr
einfachen Interface zu bedienen.
    Neben seinem komplexen Interface wurde es auch wegen seines rundenba-
sierten Aufbaus, die Spieler handeln nacheinander, ausgewählt. Das Interface
ist also, anders als z.B. bei Warcraft 3 (siehe Abschnitt 3.3), nicht darauf an-
gewiesen, unmittelbaren, superschnellen Zugriff auf alle Funktionen zu bie-
ten, sondern kann sich etwas längere Reaktionszeiten leisten. Interessant ist
es auch durch seine komplexen Menubildschirme.

Verhalten
Etherlords kann nur im Vollbildmodus betrieben werden, in zwei verschie-
denen Auflösungen. Die Auflösung beeinträchtigt die Darstellung der einzel-
nen Komponenten überhaupt nicht, es wird entweder einfach ein Rand um
das Spielfeld freigelassen und die Komponenten erscheinen kleiner. Oder es
werden neue Komponenten mit sekundären Funktionen auf dem freien Raum
eingefügt, so dass die Funktionalität in der höheren Auflösung erweitert wird.
    Hintergrundmusik und Geräusche bei Nutzeraktionen sind allgegenwär-
tig, 3D-Szenen hingegen nur im eigentlichen Spiel, nicht in den Options-
bildschirmen. Das eigentliche Interface ist sehr nahe an dem, was man von
typischen anderen Anwendungen gewohnt ist. In ihrem Verhalten unterschei-
den sich Buttons, Auswahllisten und die anderen Komponenten nur marginal
von denen aus anderen Anwendungen. Weder Transparenzen noch auffallende
großflächige Animationen sind vorhanden.

Features
Die Tabelle 3.1 führt die in Etherlords vorhandenen Standardfeatures auf.
KAPITEL 3. USER INTERFACES IN COMPUTERSPIELEN                                     27

    Tooltips lassen sich mit einem Rechtsklick der Maus einblenden und ver-
schwinden wieder, wenn die Taste losgelassen wird. Diese Tips sind nicht
einfacher Text, sondern formatiert und können auch ein Bild enthalten. Hot-
keys sind für einige Elemente definiert.

Komponenten
Alle Elemente sind sehr einheitlich gestaltet, allerdings gibt es einige wenige
Buttons, die aus dem Rahmen fallen, besondere Aufmerksamkeit erhielten
und völlig anders gestaltet sind. Auch gibt es viele animierte Elemente.
    Die Tabelle 3.2 führt die in Etherlords vorhandenen Standardkomponen-
ten auf.
    Die einzige Fensterart sind
modale Dialoge. Diese sind
allerdings sehr schlicht. So kann
der Benutzer sie weder ver-
schieben noch in irgendeiner
Weise vergrößern oder ver-
kleinern. Sie fassen einfach
Elemente zusammen und ver-
hindern das nicht zum Dia-
log gehörende Elemente be-
nutzt werden, bis der Dialog
geschlossen wurde.
    Fast alle Komponenten in
den Optionsbildschirmen wer-
den in diesen Dialogen ein-
gebettet, nur einige Buttons
machen eine Ausnahme. Die Menudialoge werden teilweise auch in anderen
Spielteilen, zum Beispiel zum Laden von Spielständen, verwendet.
    Die verwendeten Buttons unterscheiden sich nur insofern von Standard-
buttons, als sie Animationen enthalten können, um den Wechsel von einem
Zustand zum anderen anzuzeigen. Das wird aber bei weitem nicht von allen
Buttons verwendet. Im Spiel gibt es mehrere verschiedene Buttons, die sich in
der Art ihrer Darstellung unterschieden. Die Buttons im Hauptmenu werden
ausschließlich mit Hilfe von Bitmaps dargestellt, während die Rollovereffekte
einiger anderer Buttons programmtechnisch erzeugt werden2 .
  2
    Das kann hier natürlich nicht bewiesen werden sondern beruht auf der Einschätzung
des Autoren.
KAPITEL 3. USER INTERFACES IN COMPUTERSPIELEN                      28

      Komponente       Vorhanden      Bemerkung
      Tooltips             Ja         durch rechte Maustaste
      Hotkeys              Ja         vereinzelt
      Focus               Nein
      Drag and Drop       Nein
      Cut and Paste       Nein
      Undo/Redo           Nein
      Layout Manager      Nein
      Look and Feel        Ja         eigenes Look and Feel
                Tabelle 3.1: Features in Etherlords

      Komponente      Vorhanden    Bemerkung
      Labels              Ja
      Images              Ja
      Buttons             Ja
      ToggleButtons      Nein
      CheckBoxes          Ja
      RadioButtons        Ja
      ScrollBars          Ja
      Slider              Ja
      ProgressBars        Ja
      ChooseLists         Ja
      ComboBoxes         Nein
      Spinners            Ja       sehr vielfältig und spezielle
      Pannels             Ja
      Windows            Nein
      Dialogs             Ja       sehr einfach
      Registers           Ja
      ScrollPanes         Ja
      Menus              Nein
      Kontextmenus       Nein
      Toolbars           Nein
      Tables              Ja       kein editieren, vielfältig
      Trees              Nein
      Text                Ja
      StyledText         Nein
              Tabelle 3.2: Komponenten in Etherlords
KAPITEL 3. USER INTERFACES IN COMPUTERSPIELEN                              29

    Besonders interessant sind die viel-
fältig verwendeten Spinner. Neben
den bekannten gibt es noch eine Rei-
he erweiterter. Einige werden als Aus-
wahlelement für Texte oder Bilder
verwendet. Andere zeigen sogar mehr
als nur ein einzelnes Element an, sind
also schon fast Auswahllisten. Allerdings besitzen sie keine Scrollleiste son-
dern werden allein mit den zwei Buttons des Spinners bedient. Außerdem
gibt es Spinner, die nicht nur für die Auswahl eines Elements zuständig sind,
sondern die tatsächlich dynamisch Buttons aufnehmen, die dann wiederum
Aktionen auslösen können. Ein Teil dieser Funktionalität wird auch von Spin-
nern aus anderen UI-Systemen abgedeckt, aber hier findet sich eindeutig auch
erweiterte Funktionalität.
    Die Übersichtskarte ist eine weitere besondere
Komponente, eingeführt im Overviewscreen. Sie dient
vor allem der Navigation. Ein Klick verändert die
Kameraposition im 3D-Raum. Neben der Spieler-
position wird auch noch seine Blickrichtung durch
einen Pfeil dargestellt. Die Karte passt sich ver-
änderungen im Spiel an. So werden noch nicht er-
forschte Bereiche schwarz dargestellt, während die
bekannten in anderen Farben eingezeichnet werden.
KAPITEL 3. USER INTERFACES IN COMPUTERSPIELEN                               30

3.3     Echtzeitstrategie: Warcraft 3
     Die primäre Aufgabe des Spie-
                                        Name            Warcraft 3
lers in Warcraft ist der Aufbau
                                        Genre           Echtzeitstrategie
von Gebäuden, die Produktion
                                        Entwickler Blizzard
von Einheiten und das Steuern
                                        Publisher       Blizzard
derselbigen um den oder die Ge-
                                        Erschienen 2003
genspieler zu besiegen. Damit wird
                                        Homepage www.blizzard.com/war3/
an das Benutzerinterface beson-
ders die Anforderung gestellt, dass es schnell und unkompliziert zu bedienen
ist. Es kann alleine oder übers Netzwerk mit mehreren Spielern gespielt wer-
den und ist eines der meist verkauften Spiele überhaupt. Es gibt eine Erwei-
terung zu dem Spiel, Warcraft 3: Frozen Thron, die bei dieser Untersuchung
auch verwendet wird.
     Das Spiel wurde ausgewählt, weil es ein komplexes WIMP-Interface be-
sitzt, welches jedoch nicht für sich alleine steht, sondern mit einer 3D-Umgebung
interagiert. Der Benutzer kann dabei sowohl das 2D- als auch das 3D-Interface
direkt mit der Maus und der Tastertur manipulieren und diese beeinflussen
sich gegenseitig. Insofern ist das Spiel ein gutes Beispiel für den benötigten
Grad der Kommunikationsmöglichkeiten des UI-Systems mit den anderen
Teilen des Programms.

Verhalten
Das Spiel kann ausschließlich im Vollbildmodus betrieben werden. Es rea-
giert auf eine Veränderung der Bildschirmauflösung, indem die Qualität er-
höht wird, nicht aber der verfügbare Platz auf dem Bildschirm. Die einzelnen
Objekte verändern also nicht ihre Positionen und Größen sondern werden
einfach mit mehr Pixeln dargestellt. Während des Spieles können die Textu-
ren in ihrer Qualität, also ihrer Auflösung, verändert werden, was auch zu
einer qualitativen Verbesserung bzw. Verschlechterung der Darstellung der
Oberfläche resultiert.
    An allen Stellen des Spieles, auch in den Start- und Optionsbildschirmen,
gibt es dreidimensionale Animationen und eine Hintergrundmusik. Auch sind
an vielen Stellen Soundeffekte eingebaut zum Beispiel beim Drücken eines
Buttons.
    Ein weiterer besonderer Punkt, der in den Menus sichtbar wird, sind die
verwendeten Transparenzen, kombiniert mit großflächigen Animationen. Hier
werden ganze „Fenster“, die auch noch halb transparent sind, schnell über den
Bildschirm bewegt.
KAPITEL 3. USER INTERFACES IN COMPUTERSPIELEN                             31

Features
Die Tabelle 3.3 führt die in Warcraft 3 vorhandenen Standardfeatures auf.
    Über alle Komponenten hinweg findet man die üblichen Tooltips, die hier
allerdings wiederum grafisch gestaltet sind. Hotkeys werden ebenfalls benutzt
und bei Buttons mit einem Text wird der Hotkey auch farblich hervorgeho-
ben. Ein Fokussystem ist in vollem Umfang ebenfalls enthalten. So kann per
Tabulator in weiten Teilen des Programms der Fokus gesetzt und per Return
einzelne Buttons betätigt werden. Drag and Drop findet man nur in sehr pri-
mitiver Form in der Toolleiste, in der Items innerhalb der Leiste verschoben
werden oder in das 3D-Interface gezogen werden können.

Komponenten
Viele der Komponenten gibt es in unterschiedlichen grafischen Ausprägun-
gen, So kann ein Button in den Optionsbildschirmen anders aussehen als
ein Button während des Spielgeschehens. Auch reagieren sie im allgemeinen
nicht nur auf die Maus, sondern sind auch mittels Tastertur zu bedienen.
    Die Tabelle 3.4 führt die in Warcraft 3 vorhandenen Standardkomponen-
ten auf.
    Dialogs sind in Warcraft 3 nur in sehr
einfacher Form zu finden. Weder verfügen
sie über die Fähigkeit ihre Größe zu än-
dern, noch kann der Benutzer sie verschie-
ben oder schließen. Auch haben sie keine
Menus oder Toolbars. Sie dienen lediglich
dem Zusammenfassen von anderen Kompo-
nenten und können sich programmgesteu-
ert bewegen. So kann ein Fenster bei Druck
eines Buttons aus dem Bildschirm heraus-
schnellen und ein neues eingeblendet wer-
den.
    Es gibt aber auch noch eine Unterart
von Fenstern, die in etwa den modalen Dia-
logen aus bekannten Programmen entspre-
chen. Auch diese können nicht verschoben oder vergrößert werden, allerdings
deaktivieren sie alle anderen Kontrollelemente, solange sie angezeigt werden.
    Es gibt einige besondere Buttonarten, die im In-
terface verwendet werden. Diese zeichnen sich durch
erweiterte Funktionalität aus. Einige von ihnen kön-
nen mit einen rechten Mausklick ausgewählt werden, so dass ein zusätzlicher
Sie können auch lesen