Flimmern abstellen

Status
Nicht offen für weitere Antworten.
Z

Zefir

Gast
Hallo erstmal.

Mein Problem :
Ich habe ein einfaches Spiel programmiert, bestehend aus 1 Gui und 8 Klassen für die Objekte.
In diesem Spiel kommen Gebäude vor, welche im Verlauf des Spieles kommt es sehr schnell zu einem Flimmern.
Wie kann ich dieses Flimmern unterbinden und wenn es eine spezielle Klasse gibt, wo genau muss diese angebracht werden?
 

Marco13

Top Contributor
Wenn du Swing verwendest, sollte ein eigenes DoubleBuffering aber nicht nötig sein. *rumrat* Rufst du irgendwo "getGraphics" auf? ;)
 
Z

Zefir

Gast
Java:
 public void paint (Graphics g ){
    	 

    	 q.draw(g, i, h);i=i+3;
    	 if(i==921)i=0;
         b.draw(g, x, y); 
         
        u.draw(g, c , x, y, k4);
        u1.draw(g,c1 , x, y);
        u2.draw(g,c2 , x, y);
        u3.draw(g,c3 , x, y);
        u4.draw(g,c4 , x, y);
        if(haus2){g.setColor(Color.white);
        	g.fillRect(400, 300, 100, k2*30);}
        
        if(haus3){g.setColor(Color.white);
        g.fillRect(550, 200, 50, k3*40);}
        if(haus4){g.setColor(Color.white);
        g.fillRect(750, 380, 70, 20+k4*20); 
        g.setColor(Color.blue);
        g.fillOval(740,385+k4*20,20,20);
   	 g.setColor(Color.white);
	 g.fillOval(735,380+k4*20,20,20);}
        
        if(haus5){g.setColor(Color.white);
        g.fillRect(300, 200, 50, k5*40);}
        if(haus1){g.setColor(Color.white);
        g.fillRect(100, 400, 33, k1*20);}
         if (v){ //Bombe werfen
        	 ü.draw(g, i, a);        	 
        	 a=a+12;
        	 try {
                 Robot robot = new Robot();
                      Color col = robot.getPixelColor(910-i-1, h+a+70);
                      if(col.getBlue()!= 255 & col.getRed()!=255 & col.getGreen()!= 255){
                    	  g.setColor(c);
                    	  g.fillOval(890-i, 90+a, 40, 40);
                    	  v=false;a=0;
                     if (i<=200){  int rot=r.nextInt(255);//CopyofGebäude
               		   int grün=r.nextInt(255);
               		   int blau=r.nextInt(255);
               		   c= new Color(rot,grün,blau);haus4=true;k4=k4+1;}
                     if (400>=i & i>=300){  int rot1=r.nextInt(255);//CopyofGebäude1
             		   int grün1=r.nextInt(255);
             		   int blau1=r.nextInt(255);
             		   c2= new Color(rot1,grün1,blau1);haus3=true;k3=k3+1;
             		   }
                     if (550>=i & i>=400){  int rot2=r.nextInt(255);//CopyofGebäude3
           		   		int grün2=r.nextInt(255);
           		   		int blau2=r.nextInt(255);
           		   		c3= new Color(rot2,grün2,blau2);haus2=true;k2=k2+1;}
                     if (640>=i & i>=550){  int rot3=r.nextInt(255);//CopyofGebäude2
                     	int grün3=r.nextInt(255);
                     	int blau3=r.nextInt(255);
                     	c1= new Color(rot3,grün3,blau3);haus5=true;k5=k5+1;}
                     if (850>=i & i>=730){  int rot4=r.nextInt(255);//CopyofGebäude4
                     	int grün4=r.nextInt(255);
                     	int blau4=r.nextInt(255);
                     	c4= new Color(rot4,grün4,blau4);haus1=true;k1=k1+1;if(k1==10){k1=0;}
                      }}}
                    	  catch (AWTException e) {
                          e.printStackTrace();
                      }
         }
      
         if(a>470) {a=0; v=false;}
          
     }
 
U

Unregistriert

Gast
Eh ja sry ich versteh eure frage nicht so ganz das ist jetzt mal der Aufruf der einzelnen Bilder bzw der Grapphics g.
Wenn du mir genau sagst was du brauchst kann ich das auch reinstellen.
 

The_S

Top Contributor
Wir haben auch keine Frage gestellt. Einfach nur die Anmerkung: Du solltest DoubleBuffern. Auf welcher Komponente zeichnest du denn?
 
Z

Zefir

Gast
Ich zeichne auf nene Frame falls das hilft und hab bisher keinen Buffer drinn.
Bräuchte einen Quellcode für nen Buffer oder so.
 

The_S

Top Contributor
Einfach anstelle auf Graphics in deiner paint-Methode auf ein BufferedImage zeichnen und am Ende dann das Bild via Graphics zeichnen.
 

Marco13

Top Contributor
Dass man eigentlich nicht in der paint-Methode eines Frames zeichnen sollte, und das mit Swing (JFrame) sowieso besser wäre, werfe ich jetzt mal noch so ein....
 
Z

Zefir

Gast
Das klingt gut leider bin ich nicht so bewandert darin, darum meine Frage wie mache ich das?
 

Developer_X

Top Contributor
das geht alles viel einfacher.
Mach mal dieses hier:
Java:
import javax.swing.*;
import java.awt.*;

public class Game extends JFrame
{
  public Game()
  {
    setSize(200,200);
    setLocation(20,20);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setLayout(new BorderLayout());

    JPanel p = new JPanel()
    {
        @Override
        public void paintComponent(Graphics g)
        {
        //zeichne hier deinen ganzen kram
        }
    };

    add(p,"Center");

    setVisible(true);
  }
  public static void main(String[]args)
  {
     new Game();
  }
}
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen

Ähnliche Java Themen

Neue Themen


Oben