q1:loesung_buntes

Zum Bewegen des Ufos schachteln wir das Programm zum Zeichnen einfach in eine FOR-Schleife, die den x-Wert der Position jeweils um 1 erhöht. Damit man den Ablauf erkennen kann, bauen wir noch eine Verzögerungsfunktion ein. Diese besteht aus einer weiteren FOR-Schleife, die einfach als Beschäftigungstherapie die Zahl j von 1 bis zu einer eingegebenen Grenze hochzählt. Wie oft das gemacht wird, bestimmt die äußere Schleife durch einen übergebenen Parameter.

Ein weiteres Problem ist es, das gezeichnete Ufo zu löschen, bevor es wieder neu gezeichnet wird. Das erzielt man am einfachsten dadurch, dass man das Ufo an der alten Position nochmals in der Hintergrundfarbe zeichnet:

public void paint(Graphics g)
  {
     int y=100;
     int breite=getWidth();
 
     //Durchlaufe alle x-Koordinaten von 0 bis zur Fensterbreite:
     for(int x=0; x<breite; x++)
     {
        //Zeichne das UFO in roter Farbe:
        g.setColor(Color.red);
        g.drawRect(x,y,30,15);
        g.drawLine(x+15,y-10,x+15,y);
        g.drawLine(x+10,y+15,x+5,y+25);
        g.drawLine(x+20,y+15,x+25,y+25);
 
        //Warteschleife, muss je nach Prozessorgeschwindigkeit 
        //angepasst werden:
        for(int j=1; j<10000000; j++);
 
        //Lösche das Ufo:
        g.setColor(Color.white);
        g.drawRect(x,y,30,15);
        g.drawLine(x+15,y-10,x+15,y);
        g.drawLine(x+10,y+15,x+5,y+25);
        g.drawLine(x+20,y+15,x+25,y+25);
     }
  }

Anmerkung:

Das Zeichnen durch Umschreiben der Methode paint ist noch nicht perfekt, da die Methode paint eine sogenannte Callback-Methode ist, die auch vom System an allen möglichen Stellen aufgerufen wird. So kann es z.B. je nach JAVA-Version passieren, dass das Ufo zweimal fliegt.

  • /var/www/infowiki/data/pages/q1/loesung_buntes.txt
  • Zuletzt geändert: 2017/07/11 06:40
  • von admin03