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.

22
demandé sur Dew 2009-02-07 16:30:44

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:

  1. dessine ou charge une image dans un objet Image.
  2. 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:

28
répondu coobird 2009-02-07 14:08:59

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.

1
répondu Jason Plank 2011-11-17 14:57:15

Ou essayez ceci ;)

try {
  this.setContentPane(
    new JLabel(new ImageIcon(ImageIO.read(new File("your_file.jpeg")))));
} catch (IOException e) {};
0
répondu JavaIsCool 2012-04-04 22:19:29

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.

-1
répondu Ben Whithead 2012-04-26 01:56:14