Java cooperation home
Tutorial
type and press Enter

Die Bewegung eines Balles über das Applet

Zunächst wollen wir uns mit einer einfachen Animation beschäftigen. Wir wollen ein Java Applet programmieren, dass einen Kreis (Ball) von der einen Seite des Applets auf die andere bewegt. Dies ist sicherlich noch keine Großtat, aber irgendwie müssen wir ja beginnen.

Zu Beginn müssen wir wieder unsere Applet Grundstruktur implementieren, wobei wir allerdings noch zwei Dinge hinzufügen müssen. Als Erstes muss man, um eine Animation in Java verwirklichen zu können das Interface Runnable implementieren und die dazugehörige Methode run(). Wir müssen unser Applet also folgendermaßen erweitern:

import java.applet.*;
import java.awt.*;

public class BallApplet extends Applet implements Runnable
{
    public void init() { }

    public void start() { }

    public void stop() { }

    public void destroy() { }

    public void run () { }

    public void paint (Graphics g) { }

}

Um nun ein Graphik - Objekt zu bewegen, brauchen wir außerdem einen sogenannten Thread, den wir in der Start - Methode schaffen:

Threads
Ein Thread ist ein eigenständiges Programmfragment, das parallel zu anderen Threads (Multithreading) laufen kann. Threads werden in Java durch die Klasse Thread und das Interface Runnable sowie die dazugehörige Funktion run() implementiert , was wir im obigen Abschnitt ja schon getan haben. Wichtige Funktionen zur Erzeugung eines Threads sind:

  • Thread.start(): Startet einen Thread
  • Thread.stop(): Stopt einen Thread
  • Thread.sleep(Zeit in Millisekunden): Stopt den Thread für die Angegebene Zeitspanne

Die weiteren Funktionen der Klasse Thread können in der Java - API nachgelesen werden.

public void start ()
{
    // Schaffen eines neuen Threads, in dem das Spiel läuft
    Thread th = new Thread (this);
    // Starten des Threads
    th.start ();
}

Diesen Thread lassen wir nun in der Run - Methode laufen. Nach jedem Durchlauf der Run - Methode stoppen wir den Thread für eine gewisse Zeit um ihn dann erneut durchlaufen zu lassen: Die run - Methode sollte also folgendermaßen aussehen:

public void run ()
{
    // Erniedrigen der ThreadPriority
    Thread.currentThread().setPriority(Thread.MIN_PRIORITY);

    // Solange true ist läuft der Thread weiter
    while (true)
    {
      // Neuzeichnen des Applets
      repaint();

      try
      {
        // Stoppen des Threads für in Klammern angegebene Millisekunden
        Thread.sleep (20);
      }
      catch (InterruptedException ex)
      {
        // do nothing
      }

      // Zurücksetzen der ThreadPriority auf Maximalwert
      Thread.currentThread().setPriority(Thread.MAX_PRIORITY);
    }
}

Wir haben nun eine Endlosschleife, die alle Anweisungen innerhalb des while (true) - Blockes ausführt, 20 Millisekunden wartet um dann die selben Anweisungen erneut auszuführen. Wie aber sollen wir nun einen Kreis, der vom Applet gezeichnet wird bewegen.
Nun, der Kreis hat ja eine x - Koordinate und eine y - Koordinate. Wenn wir nun in jedem Durchlauf des Threads die x - Koordinate um eins erhöhen würden, so würde sich der Ball entlang der x - Achse, bei gleichbleibender y- Koordinate, bewegen.

Zeichnen wir also zunächst einen Kreis. Dazu verändern wir die paint - Methode wie folgt:

public void paint (Graphics g)
{
    // Setzten der Zeichenfarbe auf Rot
    g.setColor (Color.red);

    // Zeichen eines gefüllten Kreises
    g.fillOval (x_pos - radius, y_pos - radius, 2 * radius, 2 * radius);
}

und müssen noch folgende Instanzvariablen (am Kopf des Programmes) initialisieren:

int x_pos = 10;
int y_pos = 100;
int radius = 20;

Um den Ball nun zu bewegen verändern wir pro Threaddurchlauf die x -Koordinate um eins, die run - Methode sieht also jetzt so aus:

public void run ()
{
...
    while (true)
    {
      // Verändern der X - Koordinate des Balles
      x_pos ++;

      ...
    }
}

Wenn man das Applet nun wie im 1. Kapitel gesehen in eine Html - Seite einbindet, dann sollte sich ein roter Ball einmal quer über das Applet bewegen.

SourceCode download
Applet ansehen

Nächstes Kapitel

Reduzierung des Bildschirmflackerns
Fabian Birzele, 2001-2004.
web-design: Vadim Murzagalin, 2004.