Java-Animation flimmert

Tob1Damager

Grünschnabel
Hi,
ich hab mich jetzt mal daran versucht eine Animation zu programmieren, jetzt flimmert es aber trotz Doppelbuffer. Ich weiß nicht wie ich das umgehen kann, ich hoff mal ihr könnt mir helfen, hier der Code:
Code:
//Autor: Tobias D. Datum: 02.03.08

import java.applet.*;
import java.awt.*;

public class iTouch extends Applet
{
  private Image dbImage;
  private Graphics dbg;

  public void paint(Graphics g)
  {
    int links[]=new int[this.getSize().height/5];
    int i;
    int yl;
    int xl=50;
    Polygon p_links=new Polygon();
    p_links.addPoint(0,0);
    for(i=0;i<(this.getSize().height/5);i++)
    {
      xl+=(int)(Math.random()*11)-5;
      links[i]=xl;
      p_links.addPoint(links[i],i*5);
    }
    p_links.addPoint(xl,(i-1)*5);
    p_links.addPoint(0,(i-1)*5);
    g.fillPolygon(p_links);

    int k=0;
    for(k=0;k<200;k++)
    {
      p_links.reset();
      
      p_links.addPoint(0,0);
      int j=0;
      for(j=0;j<links.length-1;j++)
      {
        links[j]=links[j+1];
        p_links.addPoint(links[j],j*5);
      }
      links[j]=links[j]+(int)(Math.random()*11)-5;
      p_links.addPoint(links[j],j*5);
      p_links.addPoint(0,j*5);
      g.setColor(Color.WHITE);
      g.fillRect(0,0,this.getSize().width,this.getSize().height);
      g.setColor(Color.BLACK);
      g.fillPolygon(p_links);
      int l=0;
      for(l=0;l<29999999;l++)
      {
        ;
      }
    }
  }
  
  
  public void update(Graphics g)
  {
    if(dbImage==null)
    {
      dbImage = createImage (this.getSize().width, this.getSize().height);
      dbg=dbImage.getGraphics();
    }
    dbg.setColor(getBackground());
    dbg.fillRect(0,0,this.getSize().width,this.getSize().height);
    dbg.setColor(getForeground());
    paint(dbg);
    g.drawImage (dbImage, 0, 0, this);
  }
}

Danke schonmal,
Tobias
 
Hallo,

das ist mal ne kreative Animations-Strategie !

Geht aber so schon mal gar nicht ! :)

Hab mal deinen Code durch den mixer gedreht und neu arrangiert,
hoffe du erkennst noch Teile davon wieder :

Code:
import java.applet.*;
import java.awt.*;

public class iTouch extends Applet implements Runnable
{
  private Image dbImage;
  private Graphics dbg;
  private Polygon p_links;
  
  public void start(){
  	
  	// init offscreen Image
  	
    dbImage = createImage (this.getSize().width, this.getSize().height);
    dbg=dbImage.getGraphics();
      
    dbg.setColor(getBackground());
    dbg.fillRect(0,0,this.getSize().width,this.getSize().height);
    dbg.setColor(getForeground());

    // init Polygon
    
    p_links=new Polygon();
    int p_size=this.getSize().height/5;
    int i;
    int yl;
    int xl=50;
    
    p_links.addPoint(0,0);
    
    for(i=0;i<p_size;i++)
    {
      xl+=(int)(Math.random()*11)-5;
      p_links.addPoint(xl,i*5);
    }
    p_links.addPoint(xl,(i-1)*5);
    p_links.addPoint(0,(i-1)*5);
   
    // init Thread
    
    Thread thread = new Thread(this);
    thread.start();
  }
  
  public void run() {
  	
    int[] xp = p_links.xpoints;
    int len = p_links.npoints;
  	
    for(int k=0;k<200;k++)
    {
      // Shifting points
      for(int j=1;j<len-2;j++) { xp[j]=xp[j+1]; }
            
      // Update one Point
      xp[len-2]+=(int)(Math.random()*11)-5;
      
      // Clear offscreenimage
      dbg.setColor(Color.WHITE);
      dbg.fillRect(0,0,this.getSize().width,this.getSize().height);

      // Paint updated polygon 
      dbg.setColor(Color.BLACK);
      dbg.fillPolygon(p_links);
      
      // Repaint Container
      repaint();
      
      // Sleep 0,1 s
      try { 
  	  Thread.sleep(100);
      } catch(InterruptedException e) {}
      
    }
  }
  
  public void paint(Graphics g)
  {
  	g.drawImage(dbImage,0,0,this);
  }
     
  public void update(Graphics g) {
    
  	paint(g);
  }
}

Wenn Fragen dazu auftauchen, dann frag !

Gruß JAdix
 
Hey Danke,
jetzt klappts!
Hab soweit auch alles verstanden, obwohl nicht mehr viel von meinem Code übrig ist ;-)
Dankeschön das du dir die Mühe gemacht hast :) , hat mit sehr geholfen,
mit freundlichen Grüßen,
Tobias
 
Zurück