Comment définir l'image d'arrière-plan en Java?
Je développe un jeu de plate-forme simple en utilisant Java en utilisant BlueJ comme IDE. En ce moment, j'ai des sprites joueur/ennemi, des plates-formes et d'autres éléments dans le jeu dessinés en utilisant des polygones et des formes simples. Finalement, j'espère les remplacer par des images réelles.
Pour l'instant, je voudrais savoir quelle est la solution la plus simple pour définir une image (URL ou source locale) comme "arrière-plan" de ma fenêtre de jeu/toile?
Je l'apprécierais si ce n'est pas quelque chose de long ou de complexe comme mes compétences en programmation ne sont pas très bonnes et je veux garder mon programme aussi simple que possible. Veuillez fournir des exemples de codes avec des commentaires pour élaborer sur leur fonction, et aussi si c'est dans sa propre classe, comment faire appel aux méthodes pertinentes utilisées par elle sur d'autres classes.
Merci beaucoup.
4 réponses
, La réponse varie légèrement, selon que l'application ou une applet à l'aide de AWT ou Swing.
(Fondamentalement, les classes qui commencent par J
comme JApplet
et JFrame
sont Swing, et Applet
et Frame
sont AWT.)
Dans les deux cas, les étapes de base serait:
- dessine ou charge une image dans un objet
Image
. - dessinez l'image d'arrière-plan dans l'événement de peinture du
Component
que vous souhaitez dessiner l'arrière-plan dans.
Étape 1. Chargement de l'image peut être soit à l'aide de la Toolkit
classe ou par l'ImageIO
classe.
Le Toolkit.createImage
la méthode peut être utilisée pour charger un Image
à partir d'un emplacement spécifié dans un String
:
Image img = Toolkit.getDefaultToolkit().createImage("background.jpg");
De Même, ImageIO
peut être utilisé:
Image img = ImageIO.read(new File("background.jpg");
Étape 2. la méthode de peinture pour le {[11] } qui devrait obtenir l'arrière-plan devra être remplacée et peindre le Image
sur le composant.
Pour AWT, la méthode à remplacer est paint
méthode, et utiliser le drawImage
méthode de l'Graphics
objet qui est transmis dans la méthode paint
:
public void paint(Graphics g)
{
// Draw the previously loaded image to Component.
g.drawImage(img, 0, 0, null);
// Draw sprites, and other things.
// ....
}
Pour Swing, la méthode à remplacer est la paintComponent
méthode de l'JComponent
, et dessinez le Image
comme avec ce qui a été fait dans AWT.
public void paintComponent(Graphics g)
{
// Draw the previously loaded image to Component.
g.drawImage(img, 0, 0, null);
// Draw sprites, and other things.
// ....
}
Exemple De Composant Simple
Voici un {[27] } qui charge un fichier image lorsqu'il est instancié, et dessine cette image sur elle-même:
class BackgroundPanel extends Panel
{
// The Image to store the background image in.
Image img;
public BackgroundPanel()
{
// Loads the background image and stores in img object.
img = Toolkit.getDefaultToolkit().createImage("background.jpg");
}
public void paint(Graphics g)
{
// Draws the img to the BackgroundPanel.
g.drawImage(img, 0, 0, null);
}
}
Pour plus d'informations sur la peinture:
- peinture en AWT et Swing
- leçon: effectuer une peinture personnalisée à partir de les tutoriels Java peuvent être utiles.
Créez D'abord une nouvelle classe qui étend la classe WorldView
. J'ai appelé ma nouvelle classe Background
. Donc, dans cette nouvelle classe, importez tous les paquets Java dont vous aurez besoin pour remplacer la méthode paintBackground
. Cela devrait être:
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;
Suivant après le nom de la classe assurez-vous qu'il dit s'étend WorldView
. Quelque chose comme ceci:
public class Background extends WorldView
Ensuite, déclarez le jeu de variables de type Game
et une variable d'image de type Image
quelque chose comme ceci:
private Game game;
private Image image;
Alors dans le constructeur de cette classe assurez-vous que le jeu de type Game
est dans la signature du constructeur et que dans l'appel de super
, vous devrez initialiser le WorldView
, initialiser le jeu et initialiser les variables d'image, quelque chose comme ceci:
super(game.getCurrentLevel().getWorld(), game.getWidth(), game.getHeight());
this.game = game;
bg = (new ImageIcon("lol.png")).getImage();
Ensuite, vous remplacez simplement la méthode paintBackground
exactement de la même manière que lorsque vous remplacez la méthode paint
dans la classe Player
. Juste comme ceci:
public void paintBackground(Graphics2D g)
{
float x = getX();
float y = getY();
AffineTransform transform = AffineTransform.getTranslateInstance(x,y);
g.drawImage(bg, transform, game.getView());
}
Enfin, vous devez déclarer une référence de niveau de classe à la nouvelle classe que vous venez de créer dans la classe Game
et initialisez ceci dans le constructeur Game
, quelque chose comme ceci:
private Background image;
And in the Game constructor:
image = new Background(this);
Enfin, tout ce que vous avez à faire est d'ajouter l'arrière-plan au cadre! C'est la chose que je suis sûr que nous avions tous disparu. Pour ce faire, vous devez faire quelque chose comme ceci après que la variable frame
a été déclarée:
frame.add(image);
Assurez-vous d'ajouter ce code juste avant de frame.pack();
.
Assurez-vous également d'utiliser une image d'arrière-plan qui n'est pas trop gros!
Voilà! Ive remarqué que le jeu les moteurs peuvent gérer les formats D'image JPEG et PNG, mais peuvent également supporter d'autres. Même si cela aide à inclure une image d'arrière-plan dans votre jeu, ce n'est pas parfait! Parce qu'une fois que vous passez au niveau suivant, toutes vos plates-formes et sprites sont invisibles et tout ce que vous pouvez voir est votre image de fond et tous les Jlabels/Jbuttons que vous avez inclus dans le jeu.
Ou essayez ceci ;)
try {
this.setContentPane(
new JLabel(new ImageIcon(ImageIO.read(new File("your_file.jpeg")))));
} catch (IOException e) {};
Le chemin est la seule chose dont vous devez vraiment vous inquiéter si vous êtes vraiment nouveau à Java. Vous devez faire glisser votre image dans le fichier de projet principal, et il apparaîtra tout en bas de la liste.
Ensuite, le chemin du fichier est assez simple. Ce code va dans le constructeur de la classe.
img = Toolkit.getDefaultToolkit().createImage("/home/ben/workspace/CS2/Background.jpg");
CS2 est le nom de mon projet, et tout ce qui précède mène à l'espace de travail.