Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2012
    Messaggi
    19

    [Java] Movimento immagine

    Salve allora sto cercando di sviluppare un piccolo giochino in java però mi ritrovo con un problema ke mi sta dando non pochi problemi. Praticamente quando cliccho su un tasto direzionale non sempre viene letto il movimento, ovvero se ne accorge che ho cliccate il pulsante ma non avviene l'aggiornamento della posizione dell'immagine sullo schermo, questo xò non sempre capita. Adesso pubblico il codice, nn fateci caso al codice perckè è solo una Classe di prova:

    codice:
    package Immagini;  import java.awt.BorderLayout; import java.awt.Dimension; import java.awt.Graphics; import java.awt.GridLayout; import java.awt.Image; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import java.io.File; import java.io.IOException;  import javax.imageio.ImageIO; import javax.swing.ImageIcon; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.Timer;   public class MovimentoFrame extends JFrame{ 	public static final int MILLISECONDI = 100; 	public static final int SPRITE_DIM = 32; 	public static final int COLONNE = 20; 	public static final int RIGHE = 20; 	public static final int APPLET_WIDTH = RIGHE*SPRITE_DIM; 	public static final int APPLET_HEIGHT = COLONNE*SPRITE_DIM; 	public static final int JUMP = SPRITE_DIM; 	private JLabel[] arraylabel; 	private ImageIcon imgPers; 	private JLabel labelPers; 	private JPanel jp; 	private boolean isControlled=true; 	private int x; 	private int y; 	private int inc_x; 	private int inc_y; 	private Timer timer; 	private Image image; 	private ImageIcon immagine; 	private ImageIcon imgTexture; 	 	public MovimentoFrame(int x0, int y0){ 		x=x0; 		y=y0; 		inc_x=inc_y=0; 		 		try { 			image = ImageIO.read(new File("/home/vincenzo/Scrivania/grass09.jpg")); 		} catch (IOException e) { 			// TODO Auto-generated catch block 			e.printStackTrace(); 		} 		 		getContentPane().setLayout(null); //tolgo il LayoutManager predefinito 		getContentPane().setPreferredSize(new Dimension(APPLET_WIDTH, APPLET_HEIGHT)); 		imgPers = new ImageIcon("/home/vincenzo/Scrivania/persT.PNG"); 		labelPers = new JLabel(imgPers); 		labelPers.setBounds(0, 0, 32, 32); // Imposto posizione e dimensione del mio JTextPane 		labelPers.setOpaque(false); 		jp = new BackgroundPanel(image); 		jp.setLayout(null); 		jp.setBounds(0, 0, APPLET_WIDTH, APPLET_HEIGHT); // Imposto posizione e dimensione del mio JPanel 		//getContentPane().add(labelPers); 		jp.add(labelPers);// 		createImageIcon(); 		createPanelImage(); 		getContentPane().add(jp);  		addKeyListener(new DirectionKeyListener()); 	    timer = new Timer(MILLISECONDI, new ActionListener() { 	            public void actionPerformed(ActionEvent evt) { 	                int x1 = x + inc_x; 	                int y1 = y + inc_y; 	                if ((x1>=0) && (x1<APPLET_WIDTH)) 	                    x=x1; 	                if ((y1>=0) && (y1<APPLET_HEIGHT)) 	                    y=y1; 	                aggiorna(); 	            } 	        }); 	} 	private class DirectionKeyListener extends KeyAdapter { 		//Spostiamo l'immagine a seconda dell'evento della tastiera         public void keyPressed(KeyEvent event) {         	             switch (event.getKeyCode()) {                 case KeyEvent.VK_UP:                     inc_y=-JUMP;                     isControlled=false;                     break;                 case KeyEvent.VK_DOWN:                     inc_y=JUMP;                     isControlled=false;                     break;                 case KeyEvent.VK_LEFT:                     inc_x=-JUMP;                     isControlled=false;                     break;                 case KeyEvent.VK_RIGHT:                     inc_x=JUMP;                     isControlled=false;                     break;                 default:                 	break;             }                             }                  public void keyReleased(KeyEvent event) {                       / switch (event.getKeyCode()) {                 case KeyEvent.VK_UP:                 case KeyEvent.VK_DOWN:                     inc_y=0;                     break;                 case KeyEvent.VK_LEFT:                 case KeyEvent.VK_RIGHT:                     inc_x=0;                     break;             }         }     } 	public void aggiorna() { 	 		labelPers.setBounds(x, y,32,32); 		if(!isControlled) 			controll(); 		repaint(); 	} 	 	public void controll(){ 		for(int i=0;i<RIGHE;i++) 			if(labelPers.getLocationOnScreen().equals(arraylabel[i].getLocationOnScreen())){ 				System.out.println(arraylabel[i].getX()+" "+arraylabel[i].getY()); 				 				break; 		} 		isControlled = true; 	} 	class BackgroundPanel extends JPanel 	{ 	    private Image img;  	    public BackgroundPanel (Image img) 	    { 	        super (new BorderLayout ()); 	        this.img = img; 	    }  	    public void paintComponent (Graphics g) 	    { 	        super.paintComponent (g);  	        g.drawImage (img, 0, 0, this); 	    } 	} 	 	private void createImageIcon() { 		int i; 		int j; 		 		arraylabel = new JLabel[RIGHE]; 		imgTexture = new ImageIcon("/home/vincenzo/Scrivania/erbaTR.PNG"); 		for(i=0;i<RIGHE;i++){ 				arraylabel[i]= new JLabel(imgTexture); 				arraylabel[i].setSize(32,32); 				//arraylabel[i].setBounds(i*JUMP, JUMP*4, 32, 32); 			} 	} 	private void createPanelImage(){ 		//for(int i=0;i<RIGHE;i++) 			//	jp.add(arraylabel[i]); 		for(int i=0;i<RIGHE;i++){ 			arraylabel[i].setBounds(i*JUMP, JUMP*5, 32, 32); 			jp.add(arraylabel[i]); 		} 				 	} 	public static void main(String[] args) {         MovimentoFrame c= new MovimentoFrame(0,0);         c.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);         c.pack();         c.setResizable(false);         c.setVisible(true);         c.timer.start();         c.setLocationRelativeTo(null);         System.out.println(c.getSize());     } 	 }

  2. #2
    Utente di HTML.it
    Registrato dal
    Mar 2012
    Messaggi
    19
    scusate per cm è postato il codice ma nn sono riuscito a metterlo in modo sistemato, se qualcuno ne è capace può sistemarlo? XD

  3. #3
    Utente di HTML.it
    Registrato dal
    Mar 2012
    Messaggi
    19
    codice:
    public class MovimentoFrame extends JFrame{
    	public static final int MILLISECONDI = 100;
    	public static final int SPRITE_DIM = 32;
    	public static final int COLONNE = 20;
    	public static final int RIGHE = 20;
    	public static final int APPLET_WIDTH = RIGHE*SPRITE_DIM;
    	public static final int APPLET_HEIGHT = COLONNE*SPRITE_DIM;
    	public static final int JUMP = SPRITE_DIM;
    	private JLabel[] arraylabel;
    	private ImageIcon imgPers;
    	private JLabel labelPers;
    	private JPanel jp;
    	private boolean isControlled=true;
    	private int x;
    	private int y;
    	private int inc_x;
    	private int inc_y;
    	private Timer timer;
    	private Image image;
    	private ImageIcon immagine;
    	private ImageIcon imgTexture;
    	
    	public MovimentoFrame(int x0, int y0){
    		x=x0;
    		y=y0;
    		inc_x=inc_y=0;
    		
    		try {
    			image = ImageIO.read(new File("/home/vincenzo/Scrivania/grass09.jpg"));
    		} catch (IOException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    		
    		getContentPane().setLayout(null); //tolgo il LayoutManager predefinito
    		getContentPane().setPreferredSize(new Dimension(APPLET_WIDTH, APPLET_HEIGHT));
    		imgPers = new ImageIcon("/home/vincenzo/Scrivania/persT.PNG");
    		labelPers = new JLabel(imgPers);
    		labelPers.setBounds(0, 0, 32, 32); // Imposto posizione e dimensione del mio JTextPane
    		labelPers.setOpaque(false);
    		jp = new BackgroundPanel(image);
    		jp.setLayout(null);
    		jp.setBounds(0, 0, APPLET_WIDTH, APPLET_HEIGHT); // Imposto posizione e dimensione del mio JPanel
    		//getContentPane().add(labelPers);
    		jp.add(labelPers);//
    		createImageIcon();
    		createPanelImage();
    		getContentPane().add(jp); 
    		addKeyListener(new DirectionKeyListener());
    	    timer = new Timer(MILLISECONDI, new ActionListener() {
    	            public void actionPerformed(ActionEvent evt) {
    	                int x1 = x + inc_x;
    	                int y1 = y + inc_y;
    	                if ((x1>=0) && (x1<APPLET_WIDTH))
    	                    x=x1;
    	                if ((y1>=0) && (y1<APPLET_HEIGHT))
    	                    y=y1;
    	                aggiorna();
    	            }
    	        });
    	}
    	private class DirectionKeyListener extends KeyAdapter {
    		//Spostiamo l'immagine a seconda dell'evento della tastiera
            public void keyPressed(KeyEvent event) {
            	
                switch (event.getKeyCode()) {
                    case KeyEvent.VK_UP:
                        inc_y=-JUMP;
                        isControlled=false;
                        break;
                    case KeyEvent.VK_DOWN:
                        inc_y=JUMP;
                        isControlled=false;
                        break;
                    case KeyEvent.VK_LEFT:
                        inc_x=-JUMP;
                        isControlled=false;
                        break;
                    case KeyEvent.VK_RIGHT:
                        inc_x=JUMP;
                        isControlled=false;
                        break;
                    default:
                    	break;
                }       
                
            }
            
            public void keyReleased(KeyEvent event) {
                
              switch (event.getKeyCode()) {
                    case KeyEvent.VK_UP:
                    case KeyEvent.VK_DOWN:
                        inc_y=0;
                        break;
                    case KeyEvent.VK_LEFT:
                    case KeyEvent.VK_RIGHT:
                        inc_x=0;
                        break;
                }
            }
        }
    	public void aggiorna() {
    	
    		labelPers.setBounds(x, y,32,32);
    		if(!isControlled)
    			controll();
    		repaint();
    	}
    	
    	public void controll(){
    		for(int i=0;i<RIGHE;i++)
    			if(labelPers.getLocationOnScreen().equals(arraylabel[i].getLocationOnScreen())){
    				System.out.println(arraylabel[i].getX()+" "+arraylabel[i].getY());
    				
    				break;
    		}
    		isControlled = true;
    	}
    	class BackgroundPanel extends JPanel
    	{
    	    private Image img;
    
    	    public BackgroundPanel (Image img)
    	    {
    	        super (new BorderLayout ());
    	        this.img = img;
    	    }
    
    	    public void paintComponent (Graphics g)
    	    {
    	        super.paintComponent (g);
    
    	        g.drawImage (img, 0, 0, this);
    	    }
    	}
    	
    	private void createImageIcon() {
    		int i;
    		int j;
    		
    		arraylabel = new JLabel[RIGHE];
    		imgTexture = new ImageIcon("/home/vincenzo/Scrivania/erbaTR.PNG");
    		for(i=0;i<RIGHE;i++){
    				arraylabel[i]= new JLabel(imgTexture);
    				arraylabel[i].setSize(32,32);
    				//arraylabel[i].setBounds(i*JUMP, JUMP*4, 32, 32);
    			}
    	}
    	private void createPanelImage(){
    		//for(int i=0;i<RIGHE;i++)
    			//	jp.add(arraylabel[i]);
    		for(int i=0;i<RIGHE;i++){
    			arraylabel[i].setBounds(i*JUMP, JUMP*5, 32, 32);
    			jp.add(arraylabel[i]);
    		}
    				
    	}
    	public static void main(String[] args) {
            MovimentoFrame c= new MovimentoFrame(0,0);
            c.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            c.pack();
            c.setResizable(false);
            c.setVisible(true);
            c.timer.start();
            c.setLocationRelativeTo(null);
            System.out.println(c.getSize());
        }
    	
    }

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.