|
|
|
![]() |
|
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:10.