Schlieren beim DoubleBuffering mit Java

Diskutiere mit über: Schlieren beim DoubleBuffering mit Java im Mac OS X Entwickler, Programmierer Forum

  1. Jan-Michael

    Jan-Michael Thread Starter MacUser Mitglied

    Beiträge:
    391
    Zustimmungen:
    0
    Registriert seit:
    28.02.2005
    Hallo Leute,

    ich habe mich gerade mal aufgemacht, um einen kleinen Pong-Clone in Java zu erstellen. Als ich jedoch DoubleBuffering implementiert habe zeichnet Java mehrere Linien per Zufall nach, die den Sinn und Effekt von DoubleBuffering eher schmähler. Deshalb hier meine Frage: Liegt das an mir bzw. an meinem Code oder doch an der Java-Plattform? Welche möglichen Lösungen gibt es für das Problem?

    Für eure Bemühungen und euer Interesse an meinem kleinen Problem schon mal besten Dank im Vorraus. Den Quelltext hab ich nachfolgend einfach angeführt. -> Übrigens: Ich verwende die Java 5.0-Plattform

    Code:
    import java.awt.*;
    import java.awt.event.*;
    import java.applet.*;
    import javax.swing.*;
    import javax.swing.event.*;
    
    public class Bpong extends JApplet implements Runnable, KeyListener, MouseListener {
    	
    	Thread myThread;
    	Image buffer;
    	Graphics bufferGraphics;
    	int x=100, ball_x=50, ball_y=50, ball2_x=120, ball2_y=10, geschwindigkeit=90, dx=2, dy=2, d2x=2, d2y=1;
    	double zaehler=0;
    	
        public void init() {
            // set the default look and feel
            String laf = UIManager.getSystemLookAndFeelClassName();
            try {
                UIManager.setLookAndFeel(laf);
            } catch (UnsupportedLookAndFeelException exc) {
                System.err.println ("Warning: UnsupportedLookAndFeel: " + laf);
            } catch (Exception exc) {
                System.err.println ("Error loading " + laf + ": " + exc);
            }
                getContentPane().setLayout (null);
    			this.setBackground(Color.white);
    			buffer = this.createImage(this.size().width, this.size().height);
    			bufferGraphics = buffer.getGraphics();
    			this.addKeyListener(this);
    			this.addMouseListener(this);
    			myThread = new Thread(this);
        }
    	
    	public void keyPressed(KeyEvent e) {
    		switch(e.getKeyCode()) {
    			case KeyEvent.VK_LEFT: x-=4;  break;
    			case KeyEvent.VK_RIGHT: x+=4; break;
    		}
    	}
    	
    	public void keyReleased(KeyEvent e) {}
    	public void keyTyped(KeyEvent e) {}
    	
    	public void mousePressed(MouseEvent e) {
    		myThread.start();
    	}
    	
    	public void mouseReleased(MouseEvent e) { ; }
    	public void mouseClicked(MouseEvent e) { ; }
    	public void mouseEntered(MouseEvent e) { ; }
    	public void mouseExited(MouseEvent e) { ; }
    	
    	public void run() {
    		while(true) {
    			regeln();
    			repaint(ball_x-dx, ball_y-dy, 10, 10);
    			repaint(ball_x, ball_y, 10, 10);
    			repaint(ball2_x-d2x, ball2_y-d2y, 10, 10);
    			repaint(ball2_x, ball2_y, 10, 10);
    			repaint(x-4, 130, x+40-4, 130);
    			repaint(x, 130, x+40, 130);
    			zaehler++;
    			try {
    				myThread.sleep(45);
    			} catch(InterruptedException in_ex) {}
    		}
    	}
    	
    	public void stop() {}
    	
    	public void regeln() {
    		if(ball_x==0 || ball_x==140) dx=-dx;
    		if(ball_y==0 || (ball_y==120 && ball_x>(x-5) && ball_x<(x+35))) dy=-dy;
    		if(ball_y>120) { System.out.println("Du hast verloren"); myThread.stop(); }
    
    		if(ball2_x==0 || ball2_x==140) d2x=-d2x;
    		if(ball2_y==0 || (ball2_y==120 && ball2_x>(x-5) && ball2_x<(x+35))) d2y=-d2y;
    		if(ball2_y>120) { System.out.println("Du hast verloren"); myThread.stop(); }
    		
    		ball2_x+=d2x; ball2_y+=d2y;
    		ball_x+=dx; ball_y+=dy;
    		
    		//if(zaehler%300==2 && geschwindigkeit>=40) { geschwindigkeit-=10; System.out.println(geschwindigkeit); }
    		if(zaehler==9200) { System.out.println("Du hast gewonnen!"); myThread.stop();  }
    	}
    	
    	public void update(Graphics g) { paint(g); }
    
        public void paint (Graphics g) {
            super.paint(g);
    		bufferGraphics.setColor(this.getBackground());
    		bufferGraphics.fillRect(0, 0, this.size().width, this.size().height);
            bufferGraphics.setColor(Color.black);
    		bufferGraphics.drawOval(ball_x, ball_y, 10, 10);
    		bufferGraphics.drawOval(ball2_x, ball2_y, 10, 10);
    		bufferGraphics.setColor(Color.red);
    		bufferGraphics.drawLine(x, 130, x+40, 130);
    
    		g.drawImage(buffer, 0, 0, this);
        }
    }
    
     
Die Seite wird geladen...
Ähnliche Themen - Schlieren beim DoubleBuffering Forum Datum
Probleme beim bauen von "fontconfig" Mac OS X Entwickler, Programmierer 23.11.2016
Swift: Tastendruck beim Programmstart Mac OS X Entwickler, Programmierer 29.12.2015
FullScreen iAd beim Start der App Mac OS X Entwickler, Programmierer 15.09.2015
pList wird beim schreiben gelöscht mit AppleScriptObjC unter X-Code Mac OS X Entwickler, Programmierer 27.08.2015
MySQL Server Yosemite 10.10 Fehler beim Installieren und kein Autostart Mac OS X Entwickler, Programmierer 12.11.2014

Diese Seite empfehlen

Benutzerdefinierte Suche