Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    [JAVA] Applet, Le Immagini "Lampeggiano".

    Ciao a tutti.
    ultimamente sto sviluppando un giochino stupido per fare pratica con la grafica di java.

    praticamente ho una classe che eredita dalla classe applet.

    ho gia implementato il double buffering e tutto, quando voglio disegnare una gif va perfetta e fluida.

    il problema è che:
    quando comincio a mettere 2 o più gif le gif "in più" cioè quelle che ho aggiunto dopo lampeggiano e invece la prima continua ad andare fluida.

    un'altra cosa è possibile usare le OpenGL?

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: [JAVA] Applet, Le Immagini "Lampeggiano".

    Originariamente inviato da Luchky16
    ultimamente sto sviluppando un giochino stupido per fare pratica con la grafica di java.

    praticamente ho una classe che eredita dalla classe applet.

    ho gia implementato il double buffering e tutto, quando voglio disegnare una gif va perfetta e fluida.

    il problema è che:
    quando comincio a mettere 2 o più gif le gif "in più" cioè quelle che ho aggiunto dopo lampeggiano e invece la prima continua ad andare fluida.
    Senza vedere il codice che hai scritto è più facile vincere al lotto ...

    Originariamente inviato da Luchky16
    un'altra cosa è possibile usare le OpenGL?
    Ci vogliono sicuramente librerie esterne specifiche, nel framework standard di Java SE non esiste nulla legato a OpenGL o in generale al 3D.
    Esiste la API Java3D ma se non sbaglio non ha nulla a che fare con OpenGL (insomma ... è un'altra API).
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    codice:
    import java.applet.Applet;
    import java.awt.Color;
    import java.awt.Dimension;
    import java.awt.Graphics;
    import java.awt.Image;
    import java.awt.Toolkit;
    
    import javax.swing.JFrame;
    
    @SuppressWarnings("serial")
    public class Engine extends Applet implements Runnable {
    	Graphics bufferGraphics;
    	Bot[] bots = new Bot[2];
    	Image offscreen;
    	 public static final int SLEEP_DELAY = 80;
    	Dimension dim;
    	int curX, curY;
    	int x = 0;
    	Thread t1 = new Thread(this);
    
    	public void init() {
    		this.setSize(400, 400);
    		dim = getSize();
    		setBackground(Color.WHITE);
    		offscreen = createImage(dim.width, dim.height);
    		bufferGraphics = offscreen.getGraphics();
    		t1.start();
    	}
    	
    	public void start() {
    		bots[0] = new Bot(getWidth()/2, getHeight()/2, 50, 50, getImage("images/beebot.gif"));
    		bots[1] = new Bot(getWidth()/3, getHeight()/3, 50, 50, getImage("images/beebot.gif"));
    	}
    
    	public void paint(Graphics g) {
    		bufferGraphics.clearRect(0, 0, dim.width, dim.width);
    		g.drawImage(offscreen, 0, 0, this);
    		for(int i=0; i<bots.length; i++) {
    			bots[i].draw(g);
    		}
    	}
    
    	public void update(Graphics g) {
    		paint(g);
    	}
    
    	@Override
    	public void run() {
    		while(true) {
    			long startProcess = System.currentTimeMillis();
    			//b1.setX(b1.getX() + 1);
    			repaint();
    			try {
    				Thread.sleep(SLEEP_DELAY-(System.currentTimeMillis()-startProcess));
    			} catch (InterruptedException e) {
    				e.printStackTrace();
    			}
    		}
    	}
    	public Image getImage(String image) {
    		return Toolkit.getDefaultToolkit().getImage(image);
    	}
    }
    bots[i].draw(g);

    ora tralasciando magari la struttura che a qualcuno piace ad altri no, quando viene chiamato il metodo draw (che disegna l'immagine) le immagini successive alla prima "lampeggiano".

    la classe draw è compresa in ogni istanza bot che non metto ma che semplicemente definisce i punti nell'asse x e y e l'altezza e la larghezza dell'immagine:
    codice:
    bots[0] = new Bot(puntosull'assex, puntosull'assey, altezza, larghezza, getImage(immagine));

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Luchky16
    ho gia implementato il double buffering

    codice:
    	public void paint(Graphics g) {
    		bufferGraphics.clearRect(0, 0, dim.width, dim.width);
    		g.drawImage(offscreen, 0, 0, this);
    		for(int i=0; i<bots.length; i++) {
    			bots[i].draw(g);
    		}
    	}
    No, quello che hai fatto non è un "double buffering".
    Prima si disegna tutto quanto nel buffer off-screen e poi si usa il Graphics del componente a video per disegnare solo ed unicamente la immagine off-screen. Questo è il double buffering.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    e se io volessi disegnare più immagini come faccio con il double buffering?

    Edit: scusa potresti farmi un esempio di double buffering per favore?

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Luchky16
    e se io volessi disegnare più immagini come faccio con il double buffering?

    Edit: scusa potresti farmi un esempio di double buffering per favore?
    codice:
    public void paint(Graphics g) {
        // Sul buffer off-screen
        bufferGraphics.clearRect(0, 0, dim.width, dim.width);
    
        for(int i=0; i<bots.length; i++) {
            // Sul buffer off-screen
            bots[i].draw(bufferGraphics);
        }
    
        // "Butto" tutto quanto a video
        g.drawImage(offscreen, 0, 0, this);
    }
    È questo il double buffering.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  7. #7
    grazie mille andbin, sei stato l'unico disponibile a rispondermi

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.