From e995bfc4fe42770461740a454dbf7b9a615c54e6 Mon Sep 17 00:00:00 2001 From: "J. Neugebauer" Date: Mon, 25 Jul 2022 19:05:54 +0200 Subject: [PATCH] =?UTF-8?q?Bug:=20Spielemaschine=20blockt=20nicht=20mehr?= =?UTF-8?q?=20nebenl=C3=A4ufige=20Threads?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/schule/ngb/zm/Spielemaschine.java | 32 +++++++++++-------- 1 file changed, 19 insertions(+), 13 deletions(-) diff --git a/src/main/java/schule/ngb/zm/Spielemaschine.java b/src/main/java/schule/ngb/zm/Spielemaschine.java index bfed76b..e4680fc 100644 --- a/src/main/java/schule/ngb/zm/Spielemaschine.java +++ b/src/main/java/schule/ngb/zm/Spielemaschine.java @@ -1,5 +1,7 @@ package schule.ngb.zm; +import schule.ngb.zm.layers.DrawableLayer; + import java.awt.Graphics2D; import java.util.Collections; import java.util.Iterator; @@ -13,7 +15,7 @@ public class Spielemaschine extends Zeichenmaschine { private LinkedList updatables; - private GraphicsLayer mainLayer; + private GameLayer mainLayer; public Spielemaschine( String title ) { this(DEFAULT_WIDTH, DEFAULT_HEIGHT, title); @@ -26,7 +28,7 @@ public class Spielemaschine extends Zeichenmaschine { drawables = new LinkedList<>(); updatables = new LinkedList<>(); - mainLayer = new GraphicsLayer(); + mainLayer = new GameLayer(); canvas.addLayer(mainLayer); } @@ -83,7 +85,7 @@ public class Spielemaschine extends Zeichenmaschine { @Override public final void update( double delta ) { synchronized( updatables ) { - List it = Collections.unmodifiableList(updatables); + List it = List.copyOf(updatables); for( Updatable u: it ) { if( u.isActive() ) { u.update(delta); @@ -96,23 +98,27 @@ public class Spielemaschine extends Zeichenmaschine { @Override public final void draw() { - mainLayer.clear(); - synchronized( drawables ) { - List it = Collections.unmodifiableList(drawables); - for( Drawable d: it ) { - if( d.isVisible() ) { - d.draw(mainLayer.getGraphics()); - } - } - } + } - static class GraphicsLayer extends Layer { + private class GameLayer extends Layer { public Graphics2D getGraphics() { return drawing; } + @Override + public void draw( Graphics2D pGraphics ) { + clear(); + List it = List.copyOf(drawables); + for( Drawable d: it ) { + if( d.isVisible() ) { + d.draw(drawing); + } + } + super.draw(pGraphics); + } + } }