02/04/09 17:36
Anonymous
Salve gente... premettendo che col java sono alle prime armi... vorrei chiedervi in che modo si può togliere il fastidioso sfarfallio di un applet quando ad esempio si simula il movimento di qualche pallina.. ecco qua il codice dell'applet sfarfallante...
package appletpallina; import java.awt.*; import java.applet.Applet; class Pallina { int x,y; int vx, vy; int diametro; Color colore; Pallina(int x, int y, int diametro, Color colore){ this.x=x; this.y=y; vx=(int)(Math.random()*5+1); vy=(int)(Math.random()*5+1); this.colore=colore; this.diametro=diametro; } } class Movimento extends Thread{ Pallina p; AppletPallina applet; boolean stopped=false; Movimento(AppletPallina applet,int x, int y, int diametro,Color colore){ this.applet=applet; p=new Pallina(x,y,diametro,colore); } public void run(){ int ampiezza=applet.getWidth(); int altezza=applet.getHeight(); for(;;){ applet.repaint(); try{ Thread.sleep(10); }catch (InterruptedException e){ } if(p.x+p.diametro>=ampiezza){ p.vx=-p.vx; p.colore=(new Color((int)(Math.random()*255),(int)(Math.random()*255),(int)(Math.random()*255))); } if(p.y+p.diametro>=altezza){ p.vy=-p.vy; p.colore=(new Color((int)(Math.random()*255),(int)(Math.random()*255),(int)(Math.random()*255))); } if(p.x<0 && p.vx<0){ p.vx=-p.vx; p.colore=(new Color((int)(Math.random()*255),(int)(Math.random()*255),(int)(Math.random()*255))); } if(p.y<0 && p.vy<0){ p.vy=-p.vy; p.colore=(new Color((int)(Math.random()*255),(int)(Math.random()*255),(int)(Math.random()*255))); } p.x=p.x+p.vx; p.y=p.y+p.vy; if (stopped) break; } System.out.println(getName()+" fermato"); } } public class AppletPallina extends Applet { final int n=20; Movimento vettore[]=new Movimento[n]; public void init() { for (int i=0;i<n;i++){ vettore[i]=new Movimento (this, 10, 10, 50, Color.YELLOW); vettore[i].start(); } } public void paint(Graphics g){ g.clearRect(0,0,getWidth(),getHeight()); for (int i=0;i<n;i++){ g.setColor(vettore[i].p.colore); g.fillOval(vettore[i].p.x, vettore[i].p.y, (int)(vettore[i].p.diametro), (int)(vettore[i].p.diametro)); } } public void stop(){ try{ for (int i=0;i<n;i++){ vettore[i].stopped=true; vettore[i].join(); vettore[i]=null; } } catch (InterruptedException e){ System.out.println("Si è verificato un errore"); } } }
aaa