IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Graphisme Java Discussion :

Thread - Déplacement d'un point à un autre


Sujet :

Graphisme Java

  1. #1
    Membre averti
    Inscrit en
    Mars 2004
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 39
    Par défaut Thread - Déplacement d'un point à un autre
    Bonjour,

    Je fais une application en Java, et dans cette appli, j'ai besoin de faire bouger un point...

    Pour cela, j'utilise un thread...
    Le problème est le déplacement : j'ai un point de départ et un point d'arrivée.
    Comment faire pour que mon point se déplace du point de départ vers le point d'arrivée (en ligne droite !!!) ?

    Si vous avez une idée, ca m'aiderait bien.

    Merci d'avance

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 104
    Par défaut
    Au début, tu calcules
    • deltaX = (Xarrivée - Xdépart) / N
    • deltaY = (Yarrivée - Ydépart) / N

    N étant le nombre de pas que tu veux faire entre les deux points.

    Ensuite, tu pars du point de départ et tu y ajoutes deltaX et deltaY à intervalles réguliers.

    Enfin, pour réussir à atteindre le point d'arrivée, il faut que tu utilises le type double et non int !

  3. #3
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 899
    Billets dans le blog
    54
    Par défaut
    Ensuite tu peux ajouter un accélération non-linéaire pour obtenir des effets graphiques intéressants (le point commence en accélérant lentement, puis de plus en plus vite, atteint une vitesse de croisière constante, puis décelère de manière inverse jusqu'à l'arrêt total). Il me semble que Gfx a plusieurs articles sur l'application de la physique réaliste dans les GUI sur son blog (qu'il utilise pour le fondu enchainé entre 2 images il me semble).

    Sinon il faut monter une expédition archéologique pour recouvrer ses cours de physique et de maths de lycée/DEUG (oui moi aussi je les ai oublié au fin fond de ma mémoire).
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  4. #4
    Gfx
    Gfx est déconnecté
    Expert confirmé
    Avatar de Gfx
    Inscrit en
    Mai 2005
    Messages
    1 770
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 770
    Par défaut
    Exemple de deplacement d'une image sur un composant en fonction du temps. Dans cet exemple l'image ne suit pas une ligne droite mais une sinusoide. Mais il serait tres simple de calculer l'equation de la droite joignant deux points et de projeter la nouvelle position de l'image dessus.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
     
    import java.awt.Color;
    import java.awt.Dimension;
    import java.awt.Graphics;
    import java.awt.Graphics2D;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.image.BufferedImage;
     
    import javax.imageio.ImageIO;
    import javax.swing.JComponent;
    import javax.swing.Timer;
     
    public class BouncingIcon extends JComponent implements ActionListener {
        protected Color backgroundColor = Color.WHITE;
        protected BufferedImage image;
        protected Timer timer;
        protected int duration;
        protected long start;
        protected int x;
        protected int y;
     
        public BouncingIcon() {
            duration = 1000;
            try {
                image = ImageIO.read(getClass().getResource("images/item.png"));
            } catch (Exception e) { }
        }
     
        public void startAnimation() {
            if (timer == null || !timer.isRunning()) {
                timer = new Timer(1000 / 60, this);
                start = System.currentTimeMillis();
                timer.start();
            }
        }
     
        public void actionPerformed(ActionEvent e) {
            long elapsed = System.currentTimeMillis() - start;
            if (elapsed >= duration) {
                x = 200;
                timer.stop();
            } else {
                x = (int) (((double) elapsed / (double) duration) * 200.0);
            }
            y = (int) (Math.sin(x / 20) * 8);
            repaint();
        }
     
        @Override
        protected void paintComponent(Graphics g) {
            if (!isVisible()) {
                return;
            }
     
            Graphics2D g2 = (Graphics2D) g;
     
            setupGraphics(g2);
            drawBackground(g2);
            drawItem(g2);
        }
     
        protected void drawItem(Graphics2D g2) {
            int item_x = ((getWidth() - 200) / 2) + x - image.getWidth() / 2;
            int item_y = y + (getHeight() / 2) - image.getHeight() / 2;
            g2.drawImage(image, null, item_x, item_y);
        }
     
        protected void drawBackground(Graphics2D g2) {
            g2.setColor(backgroundColor);
            g2.fill(g2.getClip());
        }
     
        protected void setupGraphics(Graphics2D g2) {
        }
     
        @Override
        public Dimension getPreferredSize() {
            return new Dimension(image.getWidth() + 200,
                                 image.getHeight() * 2);
        }
    }

  5. #5
    Gfx
    Gfx est déconnecté
    Expert confirmé
    Avatar de Gfx
    Inscrit en
    Mai 2005
    Messages
    1 770
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 770
    Par défaut
    Pour les deplacements non lineaires, bouye a raison, j'utilise des trucs plus complexes. Exemple :

    http://jext.free.fr/dropinmotion2.png

Discussions similaires

  1. Un thread peut-il en lancer d'autres ?
    Par codeStaler dans le forum Débuter avec Java
    Réponses: 2
    Dernier message: 12/06/2008, 13h16
  2. [Thread] Déplacement bouton
    Par Madfrix dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 14/08/2007, 11h09
  3. déplacement contenu champ vers un autre
    Par tkwleboss dans le forum Langage SQL
    Réponses: 5
    Dernier message: 10/08/2007, 10h52
  4. Déplacement en spirale, cercle et autre
    Par franck06 dans le forum Physique
    Réponses: 3
    Dernier message: 02/04/2007, 18h20
  5. [Linux] Déplacement de plusieurs points
    Par arnaudperfect dans le forum C
    Réponses: 35
    Dernier message: 14/02/2007, 14h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo