laagen trotz Double-Buffering

Status
Nicht offen für weitere Antworten.

The_Shadow3

Mitglied
Hi,
ich versuche gerade ein Pong spiel anzufangen,aber es kommt schon das erste problem!
Das applet ist 800x600 Groß, mein PC hat ~500mhz.
Und es laagt sehr stark, wenn man die maus bewegt!
Kann da mir jemand helfen?

Code:
//import java.awt.*;
import java.applet.*; 
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.*;
import java.io.*;
import java.net.*;
public class main extends Applet implements Runnable,ActionListener,MouseMotionListener
{
	/**
	 * 
	 */
	private static final long serialVersionUID = -5881627292884828042L;

	
	Socket s;
	ServerSocket server;
	int Port = 1337;
	//Buttons
	Button BHost;
	Button BClient;
	TextField TIP;
	
	int x = 0;
	int y = 0;
	boolean ingame = false;
	
	//Double-Buffering
    Graphics bufferGraphics;
    Image offscreen;
    Dimension applet; 
	
	public void init()
	{
	
		setLayout(null);
		setBackground(Color.BLACK);
				
				
		BHost = new Button("Hosten");
		BClient = new Button("Joinen");
		TIP = new TextField("127.0.0.1",100 );
		
		
		BHost.setBounds(20,20,50,20);
		BClient.setBounds(20,60,50,20);
		TIP.setBounds(20,90,200,20);
		
		add(BHost);
		add(BClient);	
		add(TIP);

		BHost.addActionListener(this); 
		BClient.addActionListener(this); 
		addMouseMotionListener(this); 
		
	
		//Double-Buffering
		applet = getSize();
        offscreen = createImage(applet.width,applet.height);
        bufferGraphics = offscreen.getGraphics(); 
	}

	
    public void actionPerformed(ActionEvent evt) 
    {
    	if(evt.getSource() == BHost)
    	{
    		//Hosten
    		System.out.println("Bin Hoster!");
    		remove(BHost);
    		remove(BClient);
    		remove(TIP);
    		try 
    		{
				Server();
			} 
    		catch (UnknownHostException e) 
    		{
				// TODO Auto-generated catch block
				e.printStackTrace();
			} 
    		catch (IOException e) 
    		{
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
    		
    		
    		ingame = true;
    	} 
    	else if(evt.getSource() == BClient)
    	{
    		//Joinen
    		System.out.println("Bin Joiner!");
    		remove(BHost);
    		remove(BClient);
            try 
            {
				join(TIP.getText());
			} 
            catch (UnknownHostException e) 
            {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} 
            catch (IOException e) 
            {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
    		remove(TIP);
    		
    		ingame = true;
    	} 
    	
    }

    //Server
    public void Server() throws UnknownHostException, IOException
    {
    	/*server = new ServerSocket(Port);
    	s = server.accept(); 
    	BufferedReader in = new BufferedReader(new InputStreamReader(s.getInputStream()));
    	String text = in.readLine(); 
    	System.out.println(text);    	
    	in.close();
    	server.close(); 
    	*/

    }
    
    //Joinen
    public void join(String IP) throws UnknownHostException, IOException
    {
    	s = new Socket(IP,Port); 
    	BufferedWriter out = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
    	out.write("Gast joint!");
    	out.newLine();
    	out.flush();
    	out.close(); 
    }

    public void mouseMoved(MouseEvent mouseevt) 
    { 
        	x = mouseevt.getX();
        	y = mouseevt.getY();
        	repaint();

    } 
    public void mouseDragged(MouseEvent me) 
    {
    	
    }    
    public void paint(Graphics g)
    {
          if(ingame==true)
          {
        	  bufferGraphics.clearRect(0,0,applet.width,applet.width); 
        	  
        	  bufferGraphics.setColor(new Color(255,255,255));
        	  bufferGraphics.fillRect(x,y,80,40);
        	  bufferGraphics.setColor(new Color(0,0,0));
        	  bufferGraphics.drawRect(x,y,80,40);
        	  g.drawImage(offscreen,0,0,this); 
          }
    }
    public void update(Graphics g)
    {
         paint(g);
    }     
	//Tread
	public void run() 
	{
		// TODO Auto-generated method stub
		
	}
	
}

Sobald man auf Hosten klickt sieht man das "laagige (oO?)" rechteck!
 
G

Guest

Gast
mhh auf mein 1.73Ghz Laptop laagts auch nicht, aber der 500mhz rechner packt das nicht ganz so :/.
und es wurde ja gerade erst "zwei" sachen gedrawt...
gibts da wirklich keine möglichkeit es nochschneller zu machen?
 

LoN_Nemesis

Bekanntes Mitglied
Ich weiss nicht ob das an der Performance was ändert, aber ich implementiere das Double-Buffering etwas anders.

Die paint Methode sieht bei mir so aus:
Code:
public void paint(Graphics g) {
		g.drawImage(offscreen,0,0,this); 
}

In der update Methode führe ich dann die eigentlichen Zeichen Operationen aus, in deinem Fall:
Code:
public void update(Graphics g)
    {
          if(ingame==true)
          {
             bufferGraphics.clearRect(0,0,applet.width,applet.width);
            
             bufferGraphics.setColor(new Color(255,255,255));
             bufferGraphics.fillRect(x,y,80,40);
             bufferGraphics.setColor(new Color(0,0,0));
             bufferGraphics.drawRect(x,y,80,40);
             g.drawImage(offscreen,0,0,this);
          }
    }


Und schließlich habe ich noch einen Thread, der alle 40ms die repaint() Methode des Applets aufruft. Wie gesagt, weiss nicht ob das performancemässig etwas bringt, müsstest du ausprobieren.
 

The_Shadow3

Mitglied
mhh kann sein das ich es mir nur einbilde das es jetzt etwas "sampfter" geworden ist, aber laagen tuts denoch.
Wie kann man eigentlich die FPS anzeigen lassen?

Und kann es sein das paint() jetzt nichtmehr aufgeruffen wird?
 

LoN_Nemesis

Bekanntes Mitglied
Es gibt meines Wissens nach keine Klasse/Methode die FPS anzeigt, das musst du selbst ausrechnen. Ist aber nicht schwer.

Die paint() Methode wird schon noch aufgerufen, allerdings indirekt. Durch Aufruf der repaint() Methode sagst du quasi: "Ich möchte sobald wie möglich die paint() Methode meines Applets aufrufen". Das muss nicht immer sofort geschehen, zudem kann es z.B. passieren, dass mehrere repaint() Aufrufe nur einen paint() Aufruf zur Folge haben, da die manchmal zusammengefasst werden, wenn sie in sehr kurzen Abständen kommen.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
W Null-Pointer trotz Konstruktor? Java Basics - Anfänger-Themen 9
heinrich172 Methoden Trotz gleichem Element stimmt Vergleich nicht? Java Basics - Anfänger-Themen 7
U Breite von Textfeldern trotz Layoutmanager Java Basics - Anfänger-Themen 4
I Programm erkennt nicht an das Array zurückgegeben wird trotz Initialisierung *einfach* Java Basics - Anfänger-Themen 9
tun3d Packet trotz richtiger Addressierung nicht auffindbar? Java Basics - Anfänger-Themen 10
P Apache Derby wird in Eclipse trotz Anbindung nicht gefunden Java Basics - Anfänger-Themen 6
Kotelettklopfer Output korrekt trotz falschem Lösungsweg !? Java Basics - Anfänger-Themen 99
P NoClassDefFoundError: org/apache/commons/collections4/ListValuedMap trotz vorhandener Klasse? Java Basics - Anfänger-Themen 10
E Timer trotz erwartender Eingabe durchlaufen lassen Java Basics - Anfänger-Themen 11
V_Fynn03 Erste Schritte JButton funktioniert nicht trotz richtiger Methode. Java Basics - Anfänger-Themen 17
J bundel - Datei wird nicht gefunden. Trotz STRG-SHIFT-J Java Basics - Anfänger-Themen 2
U UnsupportedClassVersionError trotz neuster JRE und JDK Version Java Basics - Anfänger-Themen 7
J Unterschiedliche Ordnerstrukturen trotz gleicher Entwicklungsumgebungen Java Basics - Anfänger-Themen 3
M java.io.FileNotFoundException trotz dass Verzeichnis korrekt angegeben ist! Java Basics - Anfänger-Themen 20
helldunkel While Schleife trotz false Java Basics - Anfänger-Themen 4
L Methoden if Bedingung trotz Erfüllung, nicht angesprochen Java Basics - Anfänger-Themen 12
L [Verständnisproblem] Array wird trotz void rückgabe verändert. Java Basics - Anfänger-Themen 5
C Threads SwingWorker läuft trotz cancel weiter Java Basics - Anfänger-Themen 22
M Interpreter-Fehler Nullpointerexception trotz Ordentlicher Initialisierung Java Basics - Anfänger-Themen 4
D javac kann trotz PATH-Eintrag nicht gefunden werden (Hello World) Java Basics - Anfänger-Themen 10
P Threads Trotz Threads wird nur 1 Prozessorkern ausgelastet Java Basics - Anfänger-Themen 7
A Heap Space Error bei rekursiver Suche in Dateien trotz nur einer Zeile im Speicher Java Basics - Anfänger-Themen 26
X Array trotz Befüllung "null" Java Basics - Anfänger-Themen 11
M Arrayfelder werden trotz Beschränkung unbeschrenkt ausgegeben Java Basics - Anfänger-Themen 2
Fab1 alte Java Datei wird ausgeführt (trotz Änderung) Java Basics - Anfänger-Themen 4
O Downloaden: Trotz If Abfrage wird Datei heruntergeladen Java Basics - Anfänger-Themen 2
M Datentypbewahrung trotz Erbung Java Basics - Anfänger-Themen 12
L Applet : keine Recht für Zugriff auf Clipboard (trotz Zertifikat) Java Basics - Anfänger-Themen 4
N Input/Output EOF-Exception trotz Fehlerüberprüfung Java Basics - Anfänger-Themen 2
U Übersicht trotz mehrdimensionaler Arraylisten Java Basics - Anfänger-Themen 17
S Java Heap space trotz -Xmx1024 Java Basics - Anfänger-Themen 10
J trotz Error weitermachen Java Basics - Anfänger-Themen 4
V Kein neuer Thread trotz Runnable Java Basics - Anfänger-Themen 4
X JFrame als JAR unsichtbar trotz Exception Handling Java Basics - Anfänger-Themen 5
Y Trotz add wird Image in GradBagLayout nicht angezeigt Java Basics - Anfänger-Themen 5
L Polymorphie <identifier> expected trotz "Angabe" Java Basics - Anfänger-Themen 2
O ausgabe spinnt trotz erfolgreichem kompilieren Java Basics - Anfänger-Themen 2
D Jar klappt nicht trotz main Methode Java Basics - Anfänger-Themen 19
S JButton trotz Box-Layout skalieren Java Basics - Anfänger-Themen 6
D OpenCSV Fehllender Konstruktor trotz import und Buildpath Eintrag Java Basics - Anfänger-Themen 1
X dll löschen trotz zugriff durch java programm Java Basics - Anfänger-Themen 5
U if-Anweisung trotz Division/0 Java Basics - Anfänger-Themen 6
K BufferedReader/Writer trotz Cache? Java Basics - Anfänger-Themen 9
D Ein boolean[] Array größer als 63.000.000 erstellen? trotz -Xms und -Xmx.... Java Basics - Anfänger-Themen 7
Q Listen - DefaultListModel trotz Design ueber GUI? Java Basics - Anfänger-Themen 10
A Trotz Thread ist Program nicht erreichbar Java Basics - Anfänger-Themen 3
Q Vector verändert trotz final seine Größe Java Basics - Anfänger-Themen 5
A kein zugriff auf variable trotz public? Java Basics - Anfänger-Themen 3
D nicht genug speicher - profiling trotz error Java Basics - Anfänger-Themen 5
D Buttons gehen trotz enebled(false) Java Basics - Anfänger-Themen 8
J Spielfigur wird trotz erfolgreich aufgerufener Methode nicht Java Basics - Anfänger-Themen 22
H javac Befehl trotz Variablen einbindung ned gefunden Java Basics - Anfänger-Themen 23
C Trotz "synchronized" unerwartete Ausgabe Java Basics - Anfänger-Themen 2
K Midi stoppt trotz stop button nicht Java Basics - Anfänger-Themen 3
R windowclosing - fenster schließt immer trotz abfrage Java Basics - Anfänger-Themen 2
C Thread läuft und läuft, trotz interrupt() Java Basics - Anfänger-Themen 9
S ClassNotFoundException trotz JAR Einbindung in Eclipse Java Basics - Anfänger-Themen 2
T tooltip trotz gedrückter maustaste Java Basics - Anfänger-Themen 2
0 NoSuchMethodError: main trotz vorhandener Main Methode? Java Basics - Anfänger-Themen 9
Silver-Blue mehrere Instanzen einer Klasse, trotz Random immer das Selbe Java Basics - Anfänger-Themen 7
X trotz gleicher variablen nicht equal Java Basics - Anfänger-Themen 5
G Trotz Abfrage immer noch Zahlen doppelt Java Basics - Anfänger-Themen 3
W Double or Float zusammenrechnen Java Basics - Anfänger-Themen 15
I Review von euch erwünscht, double Rechnung falsch Java Basics - Anfänger-Themen 34
X wie bekomme ich durch Eingabeaufforderung definierte double in einen Befehl, welcher 3 erwartete double braucht? Java Basics - Anfänger-Themen 3
Avalon String in Double bzw. Währung konvertieren Java Basics - Anfänger-Themen 6
MoxMorris Integer.MAX_VALUE und Double.MAX_VALUE Unterschied Java Basics - Anfänger-Themen 3
krgewb Double mit zwei Nachkommastellen Java Basics - Anfänger-Themen 2
B Produkt eines double - streams Java Basics - Anfänger-Themen 3
Lion.King Fehler in double und int Java Basics - Anfänger-Themen 7
F java: incompatible types: possible lossy conversion from double to int Java Basics - Anfänger-Themen 1
J Double Variable und Addition Java Basics - Anfänger-Themen 2
F Double Ausgabe nicht wissenschaftlich Java Basics - Anfänger-Themen 16
S Fragen zu Ausgabe double und float Java Basics - Anfänger-Themen 3
Kotelettklopfer Variablen Double zwingen Ganzzahlen mit 2 Nachkommastellen auszugeben Java Basics - Anfänger-Themen 10
A possible lossy conversion from double to int Java Basics - Anfänger-Themen 5
I Output BigDecimal anstatt double / Problem beim Rechnen Java Basics - Anfänger-Themen 16
L ArrayList<String> --> double[] array Java Basics - Anfänger-Themen 18
FelixN Array mit verschiedene Datentypen als Rückgabewert? (Long und Double) Java Basics - Anfänger-Themen 3
J Transformation zweier Integer in ein Double Java Basics - Anfänger-Themen 26
N The method setSaldo(double) in the type Konto is not applicable for the arguments (int, int) Java Basics - Anfänger-Themen 2
C Konvertierung des int typs in den double typ für die Ausgabe mit Nachkommastellen Java Basics - Anfänger-Themen 4
V Erste Schritte Die Nuller bei double NICHT abschneiden Java Basics - Anfänger-Themen 4
Y Datentypen Double Division ungenau Java Basics - Anfänger-Themen 45
L Datentypen Rechnen und abrunden mit double Java Basics - Anfänger-Themen 7
M Writer für unterschiedliche Obj/inbt/double erstellen? Java Basics - Anfänger-Themen 1
F Character umwandeln als Double Werte Java Basics - Anfänger-Themen 8
M Double Wert nach n abschneiden ohne zu runden Java Basics - Anfänger-Themen 1
D Methode mit Übergabe double und Rückgabe String Java Basics - Anfänger-Themen 2
P Hilfe bei Double Java Basics - Anfänger-Themen 1
B Rückgabe von zwei Werten: String und double Java Basics - Anfänger-Themen 14
B HQL / Hibernate, GroupBy und Ausgabe als Double Java Basics - Anfänger-Themen 1
M Konvertierung String -> double Java Basics - Anfänger-Themen 8
A Double Scan eingrenzen Java Basics - Anfänger-Themen 2
O Erste Schritte Potenzmethode per double Java Basics - Anfänger-Themen 11
A Random Double mit Math.round() runden? Java Basics - Anfänger-Themen 1
H Double oder nicht? Java Basics - Anfänger-Themen 7
J int array als double array ausgeben Java Basics - Anfänger-Themen 9
M Int und Double in Array speichern Java Basics - Anfänger-Themen 1
J String, Int und double Array sortieren Java Basics - Anfänger-Themen 16

Ähnliche Java Themen

Neue Themen


Oben