[Résolu] Pb image de fond avec image superposée en avant-plan

Pb image de fond avec image superposée en avant-plan [Résolu] - Java - Programmation

Marsh Posté le 05-03-2004 à 10:48:12    

:bounce:  
Bonjour, (c'est mon 1er post, et je débute en java)
 
Je suis en train de développer un petit jeu du style donjons et dragons dans lequel un perso se déplace de pièces en pièces (vu de haut). Les pièces devront contenir une image de fond représentant le sol.
 
Pour l'instant je sais déplacer, grâce au clavier, l'image de mon perso.
 
Mon problème est le suivant:
J'aimerais pouvoir RéAFFICHER L'IMAGE DU PERSO (qui est superposée à l'image de fond) lors de chaque déplacement, SANS DEVOIR RéAFFICHER L'IMAGE DE FOND à CHAQUE FOIS.
 
Qui possède la clé de cette énigme?
Merki !


Message édité par voleurdecarottes le 06-03-2004 à 16:37:26
Reply

Marsh Posté le 05-03-2004 à 10:48:12   

Reply

Marsh Posté le 05-03-2004 à 21:56:54    

Vous voulez le début c'est ça??? Voilà le code qui permet de déplacer une image en utilisant le pavé directionnel. C'est peut-être fait comme un boolay mais bon, je débute. Pouvez-vous me dire le code supplémentaire à mettre, permettant d'afficher une seule fois une image de fond?
 
import java.awt.*;
import java.awt.event.*;
 
class Touches extends Frame implements KeyListener
{
  int hauteur = 150;
  int largeur = 200;
  boolean plein = false;
  Image image;
 
  Touches(String titre){
    super(titre);
    addKeyListener (this);
    setSize(800,600);
    setVisible(true);
    image = getToolkit().getImage("heros.jpg" );
  }
 
  public void keyPressed(KeyEvent evt){
      if (evt.getKeyCode() ==  KeyEvent.VK_LEFT)  
 {
   largeur = largeur - 10;
 }
      else if (evt.getKeyCode() == KeyEvent.VK_RIGHT)  
 {
   largeur = largeur + 10;
 }
      else if (evt.getKeyCode() == KeyEvent.VK_UP) hauteur = hauteur - 10;
      else if (evt.getKeyCode() == KeyEvent.VK_DOWN) hauteur = hauteur + 10;
      repaint();
  }
 
  public void keyTyped(KeyEvent evt) {}
  public void keyReleased(KeyEvent evt) {}
 
  public void paint(Graphics g){
    g.drawImage(image,largeur,hauteur,this);  
  }
 
  public static void main (String[] args)
  {
   Touches fenetre  = new Touches("touches" );
  }
}

Reply

Marsh Posté le 05-03-2004 à 21:59:07    

(Le boolean ne sert pas, là, en fait)

Reply

Marsh Posté le 05-03-2004 à 22:04:35    

utilise la methode du double buffering d'image.
Tu utilises 1 image qui contient toutes les choses à afficher et et d'autres qui contiennnent les entites qui se déplacent
 
A chaque action, tu redessinnes la premiere image citée avec tes images qui representent les décors ou les personnages, une fois dessinée, tu l'affiche. il n'y aura aucun clignotement.

Reply

Marsh Posté le 05-03-2004 à 23:42:25    

Le double buffering? Ca sonne drôlement bien ! Merci Droopy76, j'en ferai bon usage.

Reply

Marsh Posté le 06-03-2004 à 14:51:56    

C'est résolu !
 
Jme suis renseigné sur le double buffering, et un site indiquait que swing prend en compte automatiquement le double buffering. En gros j'ai juste importé javax.swing.*; et remplacé frame par JFrame. Voici le code:
 
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
 
 
class Touches extends JFrame implements KeyListener{
 int hauteur = 160;
 int largeur = 200;
 Image image;
 Image fond;
 
 
 Touches(String titre){
  super(titre);
  addKeyListener (this);
  setSize(800,600);
  setVisible(true);
  image = getToolkit().getImage("heros.jpg" );
  fond = getToolkit().getImage("fond.jpg" );
  repaint();
 }
 
 
 public void keyPressed(KeyEvent evt){
       if (evt.getKeyCode() ==  KeyEvent.VK_LEFT){
   largeur = largeur - 20;
  }
       else if (evt.getKeyCode() == KeyEvent.VK_RIGHT){
   largeur = largeur + 20;
  }
       else if (evt.getKeyCode() == KeyEvent.VK_UP) hauteur = hauteur - 20;
       else if (evt.getKeyCode() == KeyEvent.VK_DOWN) hauteur = hauteur + 20;
       repaint();
 }
 public void keyTyped(KeyEvent evt) {}
 public void keyReleased(KeyEvent evt) {}
 
 
 public void paint(Graphics g){
  g.drawImage(fond,0,0,this);  
  g.drawImage(image,largeur,hauteur,this);
 
 }
 
 
 public static void main (String[] args){
  Touches fenetre  = new Touches("touches" );
 }
}

Reply

Marsh Posté le 27-03-2004 à 01:31:00    

Après moult rebondissements, je n'utilise plus ce code. Il fonctionne pourtant, mais j'ai opté pour l'affichage de l'image du héros dans un JLabel, et de l'image de fond dans un autre JLabel. Le JLabel du héros se déplace grâce au pavé directionnel.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed