From 171df5103570946d4e1ff015dee9ed657036e94a Mon Sep 17 00:00:00 2001 From: Gregor Kleen Date: Tue, 19 Jan 2016 12:03:25 +0100 Subject: EiP 10.1 --- .../10/1/de/lmu/ifi/tcs/HuepfendeBaelle.java | 58 +++++++++++++++------- 1 file changed, 41 insertions(+), 17 deletions(-) (limited to 'ws2015/eip/blaetter/10/1/de/lmu/ifi') diff --git a/ws2015/eip/blaetter/10/1/de/lmu/ifi/tcs/HuepfendeBaelle.java b/ws2015/eip/blaetter/10/1/de/lmu/ifi/tcs/HuepfendeBaelle.java index f6e1eef..a5f1ce8 100644 --- a/ws2015/eip/blaetter/10/1/de/lmu/ifi/tcs/HuepfendeBaelle.java +++ b/ws2015/eip/blaetter/10/1/de/lmu/ifi/tcs/HuepfendeBaelle.java @@ -8,8 +8,18 @@ import java.awt.geom.Ellipse2D; import java.util.ArrayList; import java.util.Random; +/* Änderungen: + * - Runnable interface für HuepfendeBaelle + * - Neue Konstante maxFramerate & update-frequenz limitiert auf maxFramerate updates/sekunde + * - Auslagerung der update & zeichen-schleife in run() + * - Aufrufen von run() in neuem thread + * + * Hinzugefügte Methoden: run + * Veränderte Methoden: main + */ -public class HuepfendeBaelle { + +public class HuepfendeBaelle implements Runnable { private ArrayList baelle; private GraphicsWindow gw; @@ -19,6 +29,9 @@ public class HuepfendeBaelle { private final static int max_y = 480; private final static int ballgroesse = 20; private final static int knopfgroesse = 40; + + private final static int maxFramerate = 30; + /** * @param args * @throws InterruptedException @@ -41,14 +54,9 @@ public class HuepfendeBaelle { HuepfendeBaelle hb = new HuepfendeBaelle(baelle, gw); + Thread draw = new Thread(hb); + draw.start(); - //while( true ) { - for (Ball ball : baelle) { - ball.updatePosition(); - } - hb.zeichneAlleBaelle(); - //} - // Vearbeitung der Mouse-clicks. Point click = gw.mouseClick(); Random zufall = new Random(); @@ -57,20 +65,36 @@ public class HuepfendeBaelle { gw.setText("Treffer! ("+ click.x + "," + click.y +")"); } else { gw.setText("Daneben! ("+ click.x + "," + click.y +")"); - b = new Ball(randpunkt, click, (zufall.nextDouble()-0.5)*200, (zufall.nextDouble()-0.5)*200); - hb.plusBall(b); - } - for (Ball ball : baelle) { - ball.updatePosition(); + synchronized (hb) { + b = new Ball(randpunkt, click, (zufall.nextDouble()-0.5)*200, (zufall.nextDouble()-0.5)*200); + hb.plusBall(b); + } } - hb.zeichneAlleBaelle(); - click = gw.mouseClick(); // Warten auf Mausklick + click = gw.mouseClick(); } - gw.setText("Auf Wiedersehen!"); - gw.sleep(8000); + + draw.interrupt(); + + // gw.setText("Auf Wiedersehen!"); + // gw.sleep(8000); + System.exit(0); } + + public void run() { + try { + while(! Thread.interrupted()) { + synchronized (this) { + for (Ball ball : baelle) { + ball.updatePosition(); + } + zeichneAlleBaelle(); + } + Thread.sleep(1000/maxFramerate); + } + } catch (InterruptedException e) {}; + } /** * @param baelle -- cgit v1.2.3