Creare innanzitutto una nuova classe che estenda la classe WorldView
. Ho chiamato la mia nuova classe Background
. In questa nuova classe, quindi, importa tutti i pacchetti Java necessari per sostituire il metodo paintBackground
. Questo dovrebbe essere:
import city.soi.platform.*;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.image.ImageObserver;
import javax.swing.ImageIcon;
import java.awt.geom.AffineTransform;
Avanti dopo il nome della classe assicurarsi che si dice estende WorldView
. Qualcosa di simile a questo:
public class Background extends WorldView
quindi dichiarare le variabili di gioco di tipo Game
e una variabile immagine di tipo Image
qualcosa di simile:
private Game game;
private Image image;
Poi nel costruttore di questa classe assicurarsi che il gioco di tipo Game
è nella firma del costruttore e che nella chiamata a super
sarà necessario inizializzare lo WorldView
, inizializzare il gioco e inizializzare le variabili dell'immagine, ad esempio:
super(game.getCurrentLevel().getWorld(), game.getWidth(), game.getHeight());
this.game = game;
bg = (new ImageIcon("lol.png")).getImage();
Poi basta sovrascrivere il metodo paintBackground
esattamente nello stesso modo in cui avete fatto quando l'override del metodo paint
nella classe Player
. Proprio come questo:
public void paintBackground(Graphics2D g)
{
float x = getX();
float y = getY();
AffineTransform transform = AffineTransform.getTranslateInstance(x,y);
g.drawImage(bg, transform, game.getView());
}
Ora finalmente si deve dichiarare un riferimento livello di classe alla nuova classe appena creato nella classe Game
e inizializzare questo nel costruttore Game
, qualcosa di simile:
private Background image;
And in the Game constructor:
image = new Background(this);
Infine, tutto ciò che devi fare è aggiungere lo sfondo alla cornice! Questa è la cosa che sono sicuro che ci stessero tutti perdendo. Per fare questo è necessario fare qualcosa di simile dopo la variabile frame
è stata dichiarata:
frame.add(image);
Assicurati di aggiungere questo codice appena prima frame.pack();
. Assicurati anche di usare un'immagine di sfondo non troppo grande!
Ora è tutto! Ho notato che i motori di gioco sono in grado di gestire i formati di immagine JPEG e PNG, ma potrebbero anche supportare gli altri. Anche se questo aiuta a includere un'immagine di sfondo nel tuo gioco, non è perfetto!Perché una volta che vai al livello successivo tutte le tue piattaforme e sprite sono invisibili e tutto ciò che puoi vedere è la tua immagine di sfondo e qualsiasi JLabels/Jbuttons che hai incluso nel gioco.
Grazie per la risposta. Ho alcune domande: 1. Dove deve essere collocata l'immagine in questione? Puoi dare un esempio di "riserva d'immagine" perché non sono sicuro di come dovrebbe essere definito. – Dew
2. Di 'se creo una classe chiamata' Sfondo 'usando il codice sopra, quale metodo devo chiamare, nella mia classe' Gioco '(che controlla la vista, la dimensione della finestra di gioco) dalla classe Sfondo a far apparire l'immagine di sfondo? Per favore, fai un esempio. – Dew
Ecco il codice che attualmente utilizzo per impostare il colore di sfondo della finestra di gioco: view = new WorldView (mondo, larghezza, altezza); view.setBackground (new Color (230, 245, 255)); – Dew