Contrôler la fluidité de l'animation

Contrôler la fluidité de l'animation - Java - Programmation

Marsh Posté le 05-01-2006 à 18:40:33    

Bonjour,
 
Quelle alternative faudrait-il adopter pour contrôler la fluidité d'une animation ?
 
merci d'avance.

Reply

Marsh Posté le 05-01-2006 à 18:40:33   

Reply

Marsh Posté le 05-01-2006 à 20:27:26    

Une animation de quoi ? Qui utilise quel algorithme ? En Java j'imagine ? [:dawa]

Reply

Marsh Posté le 05-01-2006 à 21:27:40    

Oui, c'est pour une animation java.  
 
Voici mes 2 programmes :
 
 
import javax.swing.JFrame;
import javax.swing.JLayeredPane;
import javax.swing.JLabel;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import java.awt.Container;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import javax.swing.Timer;
 
public class Spaceship extends JFrame implements Runnable, ActionListener
{
 JLayeredPane layeredPane; // volet organisé en couches
    JLabel labelVaisseau, labelPulsar, labelhomme, labelexplosion;
 ImageIcon image1, image2, image3, image4;
 int tailleX1, tailleY1, tailleX2, tailleY2, tailleX3, tailleY3, tailleX4, tailleY4;
 JButton bouton;  
 Container conteneur; // définition d'un conteneur pour la JFrame
 Thread th; // définition d'un thread (inactif au début du TP)
 Panneau fond;
 Timer pulsar, destruction; // définition d'un timer
 boolean b;  
 
 public Spaceship() // constructeur
 {
  // titre de la fenêtre
  super("Station spatiale" );
  setBackground(Color.white);
  // création d'une instance de Panneau de type JPanel
  fond = new Panneau("images/terre.jpg" );
        // ajout des images dans les labels Swing
        image1 = new ImageIcon("images/vaisseau.gif" );
  labelVaisseau = new JLabel(image1);
  tailleX1 = image1.getIconWidth();
  tailleY1 = image1.getIconHeight();
        image2 = new ImageIcon("images/pulsar.gif" );
        labelPulsar = new JLabel(image2);
  tailleX2 = image2.getIconWidth();
  tailleY2 = image2.getIconHeight();
  image3 = new ImageIcon("images/homme.gif" );
  labelhomme = new JLabel(image3);
  tailleX3 = image3.getIconWidth();
  tailleY3 = image3.getIconHeight();
  image4 = new ImageIcon("images/explosion.gif" );
  labelexplosion = new JLabel(image4);
  tailleX4 = image4.getIconWidth();
  tailleY4 = image4.getIconHeight();
  // création du bouton
  bouton = new JButton(new ImageIcon("images/danger.gif" ));
  bouton.setContentAreaFilled(false);
  bouton.setBorderPainted(false);
  bouton.setFocusPainted(false);
  // positionnement des composants dans la fenêtre
  fond.setBounds(0, 0, fond.tailleX, fond.tailleY);
  labelVaisseau.setBounds(100, 100, tailleX1, tailleY1);
  labelPulsar.setBounds(350, 50, tailleX2, tailleY2);
  bouton.setBounds(550, 300, 100, 100);
  labelhomme.setBounds(50, 150, tailleX3, tailleY3);
  labelexplosion.setBounds(50, 10, tailleX4, tailleY4);
        // création du volet organisé en couches
        layeredPane = new JLayeredPane();
        layeredPane.setPreferredSize(new Dimension(fond.tailleX, fond.tailleY));
  // ajout des composants dans les couches du JLayeredPane
        layeredPane.add(fond, new Integer(0)); // niveau 0
  layeredPane.add(bouton, new Integer(1)); // niveau 1
  layeredPane.add(labelVaisseau, new Integer(2)); // niveau 2
  layeredPane.add(labelPulsar, new Integer(2)); // niveau 2
  layeredPane.add(labelhomme, new Integer(4)); // niveau 4
  layeredPane.add(labelexplosion, new Integer(3));//niveau 3
  // définition du volet de contenu et mise en place de la gestion en couches  
        conteneur = getContentPane();
        conteneur.add(layeredPane);
  // mise en place de la fenêtre
  pack();
  setVisible(true);
  setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  // création et lancement du pulsar
  pulsar = new Timer(1000, this);
  pulsar.start();
  //création et lancement de destruction
  destruction = new Timer(6000, this);
  destruction.start();
  // association de l'observateur au bouton
  bouton.addActionListener(this);
  th = new Thread(this);
  th.start();
  labelexplosion.setVisible(false);
 }
 
  public void run() // contenu du thread (inactif au début du TP)
 {
  int tx = 50;
  int sens = 1;
 
  while(true)
  {
   try  
   {
    th.sleep(50);
    tx += sens*5;
     
    if (tx==400 || tx==50)  
    {
     sens *= -1;  
     layeredPane.add(labelhomme,(2));
    }
    labelhomme.setBounds(tx, 150, tailleX3*2, tailleY3*2);
   }  
   catch(InterruptedException e) { System.out.println("Probleme du thread." ); }  
  }
 }
 
    public void actionPerformed(ActionEvent e) // gestion des événements
    {
  if (e.getSource() == bouton)  
  {
   System.out.println("Clic sur le bouton." );
   labelexplosion.setVisible(true);
   
  }
  if (e.getSource() == pulsar)
  {
   System.out.println("Message lance par le pulsar." + b);
   labelPulsar.setVisible(b);
   b = !b;
  }
  if (e.getSource() == destruction)
  {
   System.out.println("Destruction du vaisseau." + b);
   labelVaisseau.setVisible(false);
   labelexplosion.setVisible(false);
   bouton.setVisible(false);
   
  }
 }
 
    public static void main(String [] args) // fonction principale
 {
  new Spaceship();
    }
}
 
 
et voici le second :
 
import javax.swing.JPanel;  
import java.awt.Image;  
import java.awt.MediaTracker;  
import java.awt.Graphics;  
 
public class Panneau extends JPanel
{
 Image fond;
 int tailleX, tailleY;
 
 Panneau(String fichier) // constructeur
 {
  // chargement de l'image
  fond = getToolkit().getImage(fichier);
  MediaTracker mt = new MediaTracker(this);
  mt.addImage(fond, 0);
  try
  {
   mt.waitForID(0);
  }
  catch (InterruptedException e) { System.out.println("Probleme de chargement." ); }
 
  tailleX = fond.getWidth(null);
  tailleY = fond.getHeight(null);
 }  
 
 public void paintComponent(Graphics g) // méthode d'affichage des composants
 {  
  g.drawImage(fond, 0, 0, null);
 }
}

Reply

Marsh Posté le 08-01-2006 à 11:15:39    

Hello !
Quel est le problème avec ton programme, au juste ?

Reply

Marsh Posté le 08-01-2006 à 19:32:37    

post_it a écrit :

Hello !
Quel est le problème avec ton programme, au juste ?


 
Il n'y a pas de problème dans mon programme. J'utilise dans ce programme des gif animés, mais il est possible surement d'avoir une meilleure fluidité. Comment on peut la contrôler ? Est-ce qu'utiliser des tableaux d'images le permet ?
 
Merci d'avance.

Reply

Sujets relatifs:

Leave a Replay

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