|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Apr 2005
Città: Brianza (MB)
Messaggi: 2958
|
[Java] Problema con label
Ciao, mi sapreste spiegare come fare ad impostare un'immagine di sfondo e farli muovere sopra un'altra immagine (esempio una pedina)?
Link utili o codice. Grazie anticipate.
__________________
Trattative forum: +50 # Feedback E-Bay: 206 100% Positivi iPhone 5S 16Gb # Macbook Pro late 2013, 2.3GHz i7, 16Gb DDR3, 500Gb, OSX 10.9.5 |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
|
Potrebbe essere una cosa di questo tipo (sorgente unico, Main.java, richiede l'esistenza di un'immagine "sfondo.png" e un'immagine "pedina.png" nella cartella dei file class):
Codice:
import java.awt.*; import java.awt.event.*; import java.awt.image.*; import java.util.*; import javax.swing.*; import javax.imageio.*; public class Main { public static void main(String[] args) { final BufferedImage immaginePedina; final BufferedImage immagineSfondo; try { immaginePedina = ImageIO.read(Main.class.getResource("/pedina.png")); immagineSfondo = ImageIO.read(Main.class.getResource("/sfondo.png")); } catch(java.io.IOException ex) { System.err.println("Immagini non presenti o non leggibili"); return; } SwingUtilities.invokeLater(new Runnable() { public void run() { SimpleSfondo sfondo = new SimpleSfondo(immagineSfondo); SimplePedina pedina = new SimplePedina(sfondo, immaginePedina); KeyController controller = new KeyController(pedina); JFrame window = new JFrame("Pedina."); window.addKeyListener(controller); window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); window.add(sfondo); window.pack(); window.setVisible(true); controller.start(); }}); } } /** Uno sfondo è qualcosa su cui si disegna*/ interface Sfondo { void disegna(Image i, int x, int y); } /** Una pedina è una roba che si muove*/ interface Pedina { int DESTRA = 2; int SINISTRA = 4; int SU = 8; int GIU = 16; void muovi(int direzione); } /** Un KeyController è un oggetto correlato ad una pedina e ad un KeyListener */ class KeyController extends KeyAdapter implements Pedina { private Map<Integer, Integer> keyDirectionMap = new HashMap<Integer, Integer>(); private int movimento = 0; private Pedina pedina; public KeyController(Pedina p) { this.pedina = p; keyDirectionMap.put(KeyEvent.VK_UP, Pedina.SU); keyDirectionMap.put(KeyEvent.VK_DOWN, Pedina.GIU); keyDirectionMap.put(KeyEvent.VK_LEFT, Pedina.SINISTRA); keyDirectionMap.put(KeyEvent.VK_RIGHT, Pedina.DESTRA); } public void keyPressed(KeyEvent e) { Integer direzione = keyDirectionMap.get(e.getKeyCode()); if(direzione != null) { movimento |= direzione; } } public void keyReleased(KeyEvent e) { Integer direzione = keyDirectionMap.get(e.getKeyCode()); if(direzione != null) { movimento ^= direzione; } } public void muovi(int direzione) { pedina.muovi(direzione); } public void start() { ActionListener task = new ActionListener() { public void actionPerformed(ActionEvent e) { muovi(movimento); } }; new javax.swing.Timer(50, task).start(); } } /** Un SimpleSfondo è un oggetto correlato ad un'etichetta e ad uno sfondo */ class SimpleSfondo extends JLabel implements Sfondo { private Graphics2D graphics; private BufferedImage buffer; private final BufferedImage sfondo; /** Invoca setPreferredSize */ public SimpleSfondo(BufferedImage sfondo) { this.sfondo = sfondo; setPreferredSize(new Dimension(sfondo.getWidth(), sfondo.getHeight())); buffer = new BufferedImage(sfondo.getWidth(), sfondo.getHeight(), Transparency.OPAQUE); graphics = buffer.createGraphics(); } public void disegna(Image i, int x, int y) { graphics.setColor(Color.WHITE); graphics.drawImage(sfondo, 0, 0, null); graphics.drawImage(i, x, y, null); repaint(); } protected void paintComponent(Graphics g) { super.paintComponent(g); g.drawImage(buffer, 0, 0, null); } } /** Un SimplePedina è una pedina che si muove su uno sfondo.*/ class SimplePedina implements Pedina, Sfondo { private final Sfondo sfondo; private final Image immagine; private final Point position = new Point(); public SimplePedina(Sfondo sfondo, Image immagine) { this.sfondo = sfondo; this.immagine = immagine; } public void disegna(Image i, int x, int y) { sfondo.disegna(i, x, y); } public void muovi(int d) { int dy = d == SU ? -1 : d == GIU ? 1 : 0; int dx = d == SINISTRA ? -1 : d == DESTRA ? 1 : 0; position.translate(dx, dy); disegna(immagine, position.x, position.y); } }
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me! |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 05:34.