Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    7

    [JAVA] rotazione immagine in movimento

    Buonasera, ho un problema con la rotazione delle immagini in un programma Java. La situazione è questa: ho una classe che estende JPanel e che viene inserito in un JFrame. Questo JPanel è il mio contesto grafico del "gioco". Quindi dentro la classe ho una variabile Graphics2D che sarà incaricata, dentro del metodo panelRenderer(), di disegnare il tutto.

    codice:
    private void panelRender() {
    		if (dbImage == null) {         // Image dbImage;
    			dbImage = createImage(PWIDTH, PHEIGHT);
    			if (dbImage == null) {
    				System.out.println("dbImage is null");
    				return;
    			} else
    				dbg = dbImage.getGraphics();                 //Graphics dgb;
    		}
    		
    		dbg2d = (Graphics2D) dbg;                //Graphics2D dbg2d;
    		
    		dbg2d.drawImage(bg, 0, 0, null);              //Image bg; (sfondo del programma)
    		dbg2d.setColor(Color.gray);
    		dbg2d.drawString("THE BIRD IS FLYING", 200, 50);
    		py.draw(dbg2d);                  //Player py = new Player();
    	}
    fin qui ok. Tutto ok, tutto si disegna bene. Adesso, la parte problematica è questa:

    codice:
    class Player {
    
    .
    .
    .
    
    public void draw(Graphics2D g2d) {		
    	AffineTransform rot = new AffineTransform();
    	rot.rotate(Math.toRadians(50), SIZE/2, SIZE/2);
    		
    	rot.translate(posx, posy);
    	g2d.drawImage(py, rot, null);          //Image py;
    }
    
    .
    .
    .
    
    }
    come si vede, draw() viene richiamato da panelRender() per disegnare il personaggio 'py' che si muove automaticamente con il metodo move()

    il problema è che con il metodo draw(), il personaggio disegnato viene completamente girato, ma anche le sue coordinate di posizione, quindi il personaggio non gira su se stesso mentre mantiene il suo movimento, che è quello che vorrei io, ma si muove nella sua direzione, ma modificata di 50°

    Non so se mi spiego; quello che voglio io, appunto, è farlo girare su se stesso tutto il tempo mentre si sposta, ma non ho potuto capire se sto vedendo giusto, o bisogna usare un'altra classe o un'altro metodo.

    Grazie a tutti in anticipo, spero poter risolvere questo problema che ormai non so più dove guardare

  2. #2
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    707
    Se riuscissi a scrivere un programma piccolo piccolo che compila con la funzione
    player.draw incriminata e lo posti si risolve sicuramente.

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    7
    Non ti seguo, non capisco qual'è il concetto da seguire per far ruotare l'immagine

  4. #4
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    707
    Ti chiedevo un esempio per chiarire il tuo problema:
    << il personaggio disegnato viene completamente girato, ma anche le sue coordinate di posizione, quindi il personaggio non gira su se stesso mentre mantiene il suo movimento, che è quello che vorrei io, ma si muove nella sua direzione, ma modificata di 50° >> non è che sia proprio chiaro.

    Hai provato a fare PRIMA la traslazione e dopo la rotazione?

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    7
    Grazie, mi hai aiutato con l'ultima frase!! prima la traslazione e dopo la rotazione!!

    codice:
    private AffineTransform birdMovement() {
    	rotationdg ++;
    	if (rotationdg == 360)
    		rotationdg = 0;
    	
    	AffineTransform rot = new AffineTransform();
    	rot.translate(posx, posy);
    	rot.rotate(Math.toRadians(rotationdg), SIZE/2, SIZE/2);
    	return rot;
    }
    .
    .
    .
    public void draw(Graphics2D g2d) {		
    	g2d.drawImage(py, birdMovement(), null);
    }
    ho risolto, prima rot.translate e por rot.rotate, non capivo che se prima si ruota, anche la traslazione ne soffre il cambio.

    Grazie mille!!

  6. #6
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    707
    prego, buon divertimento...

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.