Flackern wie mit BufferedImage beheben

java_schueler

Neues Mitglied
Hallo,
bin gerade dabei PingPong mit Java zu programmieren.

Dabei komme ich mit dem Buffered Image nicht zurecht. Kann mir jemand sagen, wie ich das so einbinde, dass es nicht mehr flackert?

Java:
import java.awt.*;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.image.BufferedImage;

import javax.swing.*;


public class Spiel extends JFrame implements Runnable, KeyListener {
	
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	boolean up=false;
	boolean down=false;
	int spieler=1;
	JPanel spielfeld = new JPanel();
	
	//Anfangskoordinaten des Spielers, KI und Ball
	
	//Spieler
	private int s_x=10;
	private int s_y=170;
	
	//KI
	private int k_x=385;
	private int k_y=170;
	
	//Ball
	private int b_x=200;
	private int b_y=200;
	
	public  Spiel(){
		Thread th=new Thread(this);
		th.start();
		
		setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
		setSize( 400, 400 );
		setVisible( true );
		spielfeld.setBackground(Color.BLACK);
			
		JPanel statusleiste = new JPanel();
		statusleiste.setBackground(Color.lightGray);
			
		setLayout(new BorderLayout());
		add( spielfeld , BorderLayout.CENTER);
		add( statusleiste , BorderLayout.NORTH);
		
	
	}
	/*
	public void paint(Graphics g) {
		super.paint(g);
		
		//Schlaeger vom roten Spieler
		g.setColor(Color.RED);
		g.fillRect(10, 170, 5, 50);
		
		//Schlaeger vom blauen Spieler
		g.setColor(Color.BLUE);
		g.fillRect(385, 170, 5, 50);
		
		//Ball
		g.setColor(Color.GREEN);
		g.fillOval(200, 200, 10, 10);
		
		//System.out.println("Test");
	}
	*/
	public void update(Graphics g) {
		paint(g);
		}
	
	public void paint(Graphics g) {
		super.paint(g);
		
		//Schlaeger vom roten Spieler
		g.setColor(Color.RED);
		g.fillRect(s_x, s_y, 5, 50);
		
		//Schlaeger vom blauen Spieler
		g.setColor(Color.BLUE);
		g.fillRect(k_x, k_y, 5, 50);
		
		//Ball
		g.setColor(Color.GREEN);
		g.fillOval(b_x, b_y, 10, 10);
		
	}
	
	
	BufferedImage buffer = new BufferedImage(400,400, BufferedImage.TYPE_INT_ARGB);
	
	public void zeichneSpielfeld() {
			Graphics g = buffer.getGraphics();
			g.setColor(Color.RED);
			g.fillRect(s_x, s_y, 5, 50);
			g = this.spielfeld.getGraphics();
			g.drawImage(buffer, 20, 50, null);
	 }
	
	//@Override
	public void keyPressed(KeyEvent e){
		int key =e.getKeyCode();
		switch(key){
			case KeyEvent.VK_UP:
				up=true;
				break;
			case KeyEvent.VK_DOWN:
				down=true;
				break;
		
		}
	}
	//@Override
	public void keyReleased(KeyEvent e){
			int key =e.getKeyCode();
			switch(key){
				case KeyEvent.VK_UP:
					up=false;
					break;
				case KeyEvent.VK_DOWN:
					down=false;
					break;
			
			}
		}
	
	public void move(){
		if(up==true)s_y--;
		if(down==true)s_y++;
		pos_s(s_x, s_y);
	}
	
	//Position des Spielers
    public void pos_s(int x, int y){
    	this.s_x=x;
    	this.s_y=y;
    	//repaint();
    }
	

	@Override
	public void run() {
		
		// TODO Auto-generated method stub
		//Thread.currentThread().setPriority(Thread.MIN_PRIORITY);
		while (true)
		{ 

			
		    // Neuzeichnen des Applets


		    try
		    {
		        // Stoppen des Threads für in Klammern angegebene Millisekunden
		        Thread.sleep (20);
		    }
		    catch (InterruptedException ex)
		    {
		        // do nothing
		    }
		    
		    move();
		   // repaint();
		    zeichneSpielfeld();
		    // Zurücksetzen der ThreadPriority auf Maximalwert
		  //  Thread.currentThread().setPriority(Thread.MAX_PRIORITY);

		
		} 
		
	}
	@Override
	public void keyTyped(KeyEvent e) {
		// TODO Auto-generated method stub
		
	}

}


Würde mich über hilfreiche Antworten freuen.
 

Michael...

Top Contributor
[JAVA=100] g = this.spielfeld.getGraphics();[/code]
Falsche Vorgehensweise. Nach Möglichkeit niemals getGraphics an Komponenten aufrufen. Ebenfalls ist es nicht schön die paint eines JFrames zu überschreiben.
Überlicherweise definiert man eine eigenen Klasse die von JComponent oder JPanel erbt und deren paintComponent(Graphics g) Methode überschreibt. Gezeichnet wird dann ausschließlich im Kontext dieser Methode und mit dem hier übergebenen Graphics Objekt.
 

GUI-Programmer

Top Contributor
Graphics Objekt........

Hier mal ein paar nützliche Themen, die das Zeichnen erklären: Zeichnen in Swing Tutorial und KEIN Swing-Tutorial

Nimm dir die Zeit und schau sie dir aufmerksam an. Danach dürfte Zeichnen für dich kein Problem mehr darstellen.


P.S. Falls du dir die Zeit doch nicht nimmst/nehmen kannst, schau dir die Sache mit Interface Paintable an (gibt es dank mir jetzt auch in beiden Threads!)
 

java_schueler

Neues Mitglied
Vielen Dank für die Antworten. Hab mir auch die Links durchgelesen, aber weiß immer noch nicht so richtig, wie ich das jetzt machen soll.

Kann mir jemand vielleicht einen Ansatz zeigen? Das wäre echt nett.
 

xehpuk

Top Contributor
Pack den Zeichencode fürs Spielfeld zum anderen Zeichencode. Verwende dabei die
Code:
Graphics
, die du über den Parameter der Methode erhalten hast. Diese sollte, wenn du dann von
Code:
JPanel
erbst, dann
Code:
paintComponent()
sein.
Die x- und y-Koordinaten wirst du dann ein wenig anpassen müssen, da bei
Code:
JFrame
der Ursprung ganz oben links vom Fenster ist, während er bei
Code:
JPanel
ganz oben links von der Komponente ist, also wenn es das contentPane des
Code:
JFrame
ist, dann direkt unter der Titelleiste und rechts vom Fensterrand.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
T Flackern trotz DoubleBuffering AWT, Swing, JavaFX & SWT 8
L JButton flackern - Programm hängt sich auf AWT, Swing, JavaFX & SWT 3
G Applet Applet Komponenten flackern AWT, Swing, JavaFX & SWT 10
G Swing Flackern nach Override von paintComponent() AWT, Swing, JavaFX & SWT 3
S Swing Flackern und ausbrechen bei neuzeichnung AWT, Swing, JavaFX & SWT 7
K AWT flackern trotz buffering AWT, Swing, JavaFX & SWT 4
Z Flackern trotz Offscreen Image / Doublebuffer, (+ Frage zu Pixelvergleich) AWT, Swing, JavaFX & SWT 25
V Applet JApplet Flackern durch Repaint AWT, Swing, JavaFX & SWT 11
L Swing Flackern in Frame bei erstem Klick AWT, Swing, JavaFX & SWT 19
R Flackern beim JPanel-Übermalen AWT, Swing, JavaFX & SWT 9
P SWT SWT flackern beheben AWT, Swing, JavaFX & SWT 9
D Undecorated JFrame ohne Flackern resizen AWT, Swing, JavaFX & SWT 21
K Flackern trotz Double-Buffering AWT, Swing, JavaFX & SWT 10
sylo Flackern des Mauszeigers bei DND AWT, Swing, JavaFX & SWT 4
G ColorReader, bei Fadenkreuz zeichnen mit repaint() flackern AWT, Swing, JavaFX & SWT 19
eQuest Swing Snake repaint() "flackern" AWT, Swing, JavaFX & SWT 13
J Flackern in JEditorPane() AWT, Swing, JavaFX & SWT 14
JRTHEFROG Auflösungsabhängiges Flackern von Bildschirmmasken AWT, Swing, JavaFX & SWT 3
B JFrame flackern durch setSize() AWT, Swing, JavaFX & SWT 8
N Flackern beim neuzeichnen von JPanel AWT, Swing, JavaFX & SWT 19
S Falsche Position, Elemente erscheinen nicht, Flackern AWT, Swing, JavaFX & SWT 6
S animation Flackern trotz doppelpufferung wieso? AWT, Swing, JavaFX & SWT 2
U Flackern verhindern AWT, Swing, JavaFX & SWT 5
J Flackern beim ersten laden von JPanel AWT, Swing, JavaFX & SWT 4
T Labels verschieben / Flackern AWT, Swing, JavaFX & SWT 2
I Arbeitsspeicherverbrauch BufferedImage.TYPE_INT_RGB vs. TYPE_3BYTE_BGR AWT, Swing, JavaFX & SWT 6
H BufferedImage zurücksetzen funktioniert nicht AWT, Swing, JavaFX & SWT 12
L AWT Ändern der Farbe eines BufferedImage mit Farbähnlichkeit AWT, Swing, JavaFX & SWT 5
I GEmaltes BufferedImage löschen AWT, Swing, JavaFX & SWT 3
cool_brivk24 BufferedImage einem ClickEvent hinzufügen AWT, Swing, JavaFX & SWT 13
cool_brivk24 AWT BufferedImage wird nicht geladen AWT, Swing, JavaFX & SWT 17
J linken Bildausschnitt eines BufferedImage abschneiden AWT, Swing, JavaFX & SWT 4
Zar von Domarus JFrame zu BufferedImage konvertieren AWT, Swing, JavaFX & SWT 3
S 2D-Grafik User-BufferedImage rotieren im Zentrum und ohne "anpassung" AWT, Swing, JavaFX & SWT 2
C Pixel-Rendering/Animation Performance in BufferedImage AWT, Swing, JavaFX & SWT 1
H Swing BufferedImage zeichnen AWT, Swing, JavaFX & SWT 1
C Swing BufferedImage zeichnen und JLabels setzen. AWT, Swing, JavaFX & SWT 17
G Subimage von BufferedImage speichern AWT, Swing, JavaFX & SWT 4
D JPanel Graphic2D als BufferedImage Speichern AWT, Swing, JavaFX & SWT 5
D BufferedImage -> Feature Extraktion. Unterschiedliche BufferedImage imageTypes problem AWT, Swing, JavaFX & SWT 4
I 2D-Grafik Shape aus BufferedImage "löschen" AWT, Swing, JavaFX & SWT 2
M 2D-Grafik LookupOp Operation auf BufferedImage AWT, Swing, JavaFX & SWT 7
GianaSisters 2D-Grafik BufferedImage.getSubimage - Frage AWT, Swing, JavaFX & SWT 7
P BufferedImage schlechte Qualität beim Abspeichern AWT, Swing, JavaFX & SWT 9
S BufferedImage als schwarz-weiß-Bild AWT, Swing, JavaFX & SWT 3
Luk10 BufferedImage[...].getData() vs BufferedImage.setRGB() AWT, Swing, JavaFX & SWT 2
D Schnelles kopieren von Pixeln in ein BufferedImage AWT, Swing, JavaFX & SWT 25
N Swing BufferedImage neu laden AWT, Swing, JavaFX & SWT 10
N 2D-Grafik BufferedImage, Line2D, Swing und die Probleme AWT, Swing, JavaFX & SWT 5
Luk10 BufferedImage auf ein anderes BufferedImage zeichnen AWT, Swing, JavaFX & SWT 6
P BufferedImage auf JPanel AWT, Swing, JavaFX & SWT 11
K 2D-Grafik BufferedImage eingelesen, welches Modell?! AWT, Swing, JavaFX & SWT 2
T BufferedImage bei paintComponent AWT, Swing, JavaFX & SWT 6
C 2D-Grafik BufferedImage laden, Frage zum Code AWT, Swing, JavaFX & SWT 2
0x7F800000 2D-Grafik int[] zu BufferedImage konvertieren AWT, Swing, JavaFX & SWT 27
H 2D-Grafik BufferedImage aus Integer-Array AWT, Swing, JavaFX & SWT 3
Luk10 2D-Grafik BufferedImage sauber rotieren AWT, Swing, JavaFX & SWT 16
P Image mehrfach in ein BufferedImage zeichnen AWT, Swing, JavaFX & SWT 7
A BufferedImage nach dem Speichern immer schwarz AWT, Swing, JavaFX & SWT 8
J Bild aus Datei in BufferedImage laden AWT, Swing, JavaFX & SWT 4
E BufferedImage Alphaknal ein- und ausblenden AWT, Swing, JavaFX & SWT 7
N BufferedImage zeichnen AWT, Swing, JavaFX & SWT 4
D BufferedImage Größe skalieren AWT, Swing, JavaFX & SWT 2
P Swing Vom BufferedImage bei paintComponent nur soviel zeichnen, wie nötig AWT, Swing, JavaFX & SWT 3
B 2D-Grafik BufferedImage Performance AWT, Swing, JavaFX & SWT 3
Y frage zu BufferedImage AWT, Swing, JavaFX & SWT 7
E AWT RenderedImage aus BufferedImage erzeugen, um Bild abzuspeichern? AWT, Swing, JavaFX & SWT 4
S Unterscheiden ob ein Graphics-Objekt von einer JComponent oder einem BufferedImage kommt..? AWT, Swing, JavaFX & SWT 4
A 2D-Grafik BufferedImage wird nicht eingezeichnet AWT, Swing, JavaFX & SWT 3
G 2D-Grafik BufferedImage Hintergrund immer schwarz AWT, Swing, JavaFX & SWT 4
Developer_X Swing Auf ein BufferedImage mit Graphics/Graphics2D zeichnen AWT, Swing, JavaFX & SWT 6
J AWT BufferedImage to 2DArray AWT, Swing, JavaFX & SWT 10
R Bild drehen UND skalieren (Image bzw BufferedImage) AWT, Swing, JavaFX & SWT 5
J JPanel in Bufferedimage AWT, Swing, JavaFX & SWT 3
1 BufferedImage in byte[], dann in String und zurück AWT, Swing, JavaFX & SWT 7
J Swing paintComponent() - repaint() - BufferedImage anzeigen AWT, Swing, JavaFX & SWT 5
C BufferedImage-Fehler? Falsches Bild wir gezeichnet AWT, Swing, JavaFX & SWT 5
B BufferedImage Builder AWT, Swing, JavaFX & SWT 15
F Transparentes BufferedImage über BufferedImage AWT, Swing, JavaFX & SWT 12
F Größe von BufferedImage ändern AWT, Swing, JavaFX & SWT 27
I Swing JComponent als BufferedImage speichern AWT, Swing, JavaFX & SWT 18
Dragonfire Swing Zoom-Vorgang optimieren [BufferedImage] AWT, Swing, JavaFX & SWT 2
2 Memory Leak mit BufferedImage !! AWT, Swing, JavaFX & SWT 15
X BufferedImage maximiert in JFrame anzeigen? AWT, Swing, JavaFX & SWT 2
R JPanel - BufferedImage - zeichnen großer Bilder AWT, Swing, JavaFX & SWT 2
R JTable - TableCellRenderer - BufferedImage AWT, Swing, JavaFX & SWT 9
D BufferedImage und Graphics2D AWT, Swing, JavaFX & SWT 3
R Zeichnen von Zahlen in BufferedImage AWT, Swing, JavaFX & SWT 6
G BufferedImage.getRGB() mit 3 int-Werten vergleichen AWT, Swing, JavaFX & SWT 2
Luma BufferedImage wird nicht gezeichnet AWT, Swing, JavaFX & SWT 3
G keine ScaledInstance von BufferedImage? AWT, Swing, JavaFX & SWT 6
S BufferedImage & Scaling: Altes Problem im neuen Gewand AWT, Swing, JavaFX & SWT 2
G zu viele/große BufferedImage führt zu Java heap space AWT, Swing, JavaFX & SWT 5
G BufferedImage und jpg --> maximale Qualität AWT, Swing, JavaFX & SWT 9
F HTML Text irgendwie auf BufferedImage bringen AWT, Swing, JavaFX & SWT 3
R BufferedImage Problem AWT, Swing, JavaFX & SWT 2
G Problem mit BufferedImage und imageIO AWT, Swing, JavaFX & SWT 2
S BufferedImage drehen AWT, Swing, JavaFX & SWT 3
? ActionListener auf BufferedImage AWT, Swing, JavaFX & SWT 11
M BufferedImage mit html interpretierten String beschriften AWT, Swing, JavaFX & SWT 3

Ähnliche Java Themen

Neue Themen


Oben