Sie sind auf Seite 1von 2

Andrew Davison Killer Game programming

1. Animation FrameWork
- GamePanel ist ein weies Canvas innerhalb eines JFrame, Methode
addNotify wird automatisch gecalled, wenn GamePanel zum GUI
-

hinzugefgt wird
Gut ist es in Methode addNotify die Animation zu starten thread.

(animator)
stopGame() wird gecalled wenn user Programm beenden mchte

boolean running wird false


(manche Autoren bevorzugen die Java Methode Threads stop()
jedoch stoppt mit dieser Methode alles evtl. werden noch einige
Daten ausgetauscht boolean ist besser, weil Programmierer die

Mglichkeit hat zu entscheiden, wie loop endet


GamePanel hat zwei Threads: 1Animator Thread (fr update und
rendering) und GUI event processing thread bentigt fr

mouseListener und keyListener


Wenn user etwas drckt, um Game zu beenden, macht called event
dispatch thread die Methode stopGame() die setzt running auf

false;
Wichtig: zwei Threads stopGame kann das thread running nicht

auf false setzen, whrend animation das thread liest


Oft groer Fehler: game tten mit boolean running game ist zu
ende wenn palyer gewinnt oder verliert das bedeutet nicht das
Applikation beendet wird (z.B. kann User noch einmal spielen oder

Daten in HighScore Tabelle eintragen)


Wichtig: separat boolean running und boolean gameOver
Sleep: animations Loop hat 20 ms of sleep time warum?
1. Sleep lsst animations Thread stoppen CPU kann andere
Sachen erledigen (z.B. Garbage Collector) ohne sleep kann
GamePanel die ganze Computer Leistung beanspruchen
2. Sleep gibt repaint() Methode Zeit zu starten sleep schafft
Pause, bevor nchster update oder rendering cycle anfgnt
3. Sleep verringert die Mglichkeit fr Event Kollision falls JVM mit
repaint berladen ist, kann rendering bersprungen werden und
animation berspruingt, sodass frames verloren werden

Double Buffering

Zeichenprozess ist nicht direkt auf den Bildschirm, sondern zuerst


auf ein zweites Image dbImage wird durch paintComponent auf
Bildschirm gebrachtals Ergebnis der Forderung des repaint im run()

Loop
Vorteil von double Rendering = verringert Flickering auf Bildschirm
falls das zeichnen direkt auf Bildschirm gemacht wird, kann der User

dies irgendwann bemerken


Der call drawImage() im paitnComponent ist schnell genug, dass von

einem Frame zum anderen Frame gewchselt wird


Andere Grund fr painComponent ist die Tatsache,d ass die JVM
paintComponent ruft, unabhngig vom animation Thread dies
geschieht wenn die Apllication Fenster von einem anderen Fenster
berdeckt und dann schlielich wird nach vorne kommt