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

AWT/Swing Java Discussion :

Faire défiler une image de haut en bas


Sujet :

AWT/Swing Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti Avatar de mimievan
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2015
    Messages : 25
    Par défaut Faire défiler une image de haut en bas
    Bonjour à tous.
    Je chercherais un moyen de faire défiler une partie de mon image dans JPanel suivant le déplacement du joueur. L'image en question est elle-même utilisée comme terrain de jeu. Est-ce que quelqu'un pourrait me donner quelques tuyaux pour commencer? Merci pour ceux qui vont répondre
    Nom : terr.png
Affichages : 632
Taille : 10,3 Ko

  2. #2
    Membre expérimenté Avatar de Kazh Du
    Homme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2011
    Messages
    152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2011
    Messages : 152
    Par défaut
    Je te déconseille d'aborder le problème via Swing. Swing sert à afficher et contrôler des fenêtres.

    Pour gérer des images, il faut directement se tourner vers l'API Java2D et la manipulation de la classe Graphics. La méthode drawImage devrait pouvoir t'aider à faire ce que tu souhaites.

  3. #3
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 713
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 713
    Par défaut
    Plus simple :

    Ton image est placée dans un JPanel (qui lui-même est probablement placé dans un JFrame).
    Tu peux placer le JPanel dans un JScrollPane ce qui rend ton JPanel "défilant".
    Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)

    Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/

  4. #4
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 713
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 713
    Par défaut Exemple
    un exemple opérationnel :

    Ton JPanel qui contient le terrain :
    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
     
    import java.awt.Graphics;
    import java.awt.Image;
     
    public class PanelTerrain extends javax.swing.JPanel {
     
        public PanelTerrain() {
        }
     
        public void paintComponent(Graphics g) {
            super.paintComponent(g);
            java.awt.Toolkit toolkit = java.awt.Toolkit.getDefaultToolkit();
            Image img = toolkit.getImage("terr.png");
            int w = img.getWidth(this);
            int h = img.getHeight(this);
            g.drawImage(img, 0, 0, w, h, this);
        }
     
    }
    Le JFrame qui affiche le tout :
    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
     
    import java.awt.Dimension;
    import javax.swing.JScrollPane;
     
    public class JFrameDuJeu extends javax.swing.JFrame {
     
        public JFrameDuJeu() {
            setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
            setSize(220, 320);
            PanelTerrain panelTerrain = new PanelTerrain();
            panelTerrain.setPreferredSize(new Dimension(190, 517));
            jScrollPane = new JScrollPane(panelTerrain);
            add(jScrollPane);
     
    //        en option : suppression de l'affichage de la barre de défilement verticale
    //        jScrollPane.getVerticalScrollBar().setPreferredSize(new Dimension(0, 0));
     
            pack();
            setLocationRelativeTo(null);
        }
     
     
        public static void main(String args[]) {
     
            java.awt.EventQueue.invokeLater(new Runnable() {
                public void run() {
                    new JFrameDuJeu().setVisible(true);
                    frameDuJeu.setDefilement(70);
                }
     
            });
        }
     
     
    //      ci-dessous tu fixes le défilement du terrain par programme.
        public void setDefilement(final int value) {
            jScrollPane.getVerticalScrollBar().setValue(value);
        }
     
    JScrollPane jScrollPane;
     
     
    }
    Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)

    Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/

  5. #5
    Membre averti Avatar de mimievan
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2015
    Messages : 25
    Par défaut
    Merci pour les réponses.

    Et si je veux faire cela de bas en haut? parce que normalement le joueur part du bas vers le haut.

  6. #6
    Membre expérimenté Avatar de Kazh Du
    Homme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2011
    Messages
    152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2011
    Messages : 152
    Par défaut
    Une soustraction peut-être ?

    Le point d'origine des images est toujours en haut à gauche, c'est une convention qui a été prise (relatif au fonctionnement des écrans au passage). A toi d'adapter ton code à cette norme. Je te conseille tout de même de faire en sorte que ton terrain corresponde à l'interface (utiliser le même point d'origine et éventuellement la même échelle), ça évitera des calculs trop tirés par les cheveux.

  7. #7
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 713
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 713
    Par défaut
    Dans l'exemple que j'ai posté, tu utilises la méthode setDefilement pour fixer le niveau.
    donc si tu fais :
    - setDefilement(200) on voit le bas du terrain
    - setDefilement(100) on voit le milieu du terrain
    - setDefilement(0) on voit le haut du terrain

    Après, il faudra très probablement régler le problème de la fluidité de l'affichage si tu fais plusieurs setDefilement de suite.
    Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)

    Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/

Discussions similaires

  1. Faire défiler une image en fondu
    Par Drakalex007 dans le forum Développement iOS
    Réponses: 5
    Dernier message: 26/03/2014, 20h55
  2. Center une image de haut en bas
    Par cccb24 dans le forum Mise en page CSS
    Réponses: 3
    Dernier message: 13/06/2013, 19h58
  3. Faire défiler une image
    Par Alba.1337 dans le forum AWT/Swing
    Réponses: 0
    Dernier message: 20/03/2012, 21h06
  4. Faire défiler une image dans un ScrollBox
    Par Duan dans le forum Débuter
    Réponses: 4
    Dernier message: 06/06/2011, 00h55
  5. Comment faire défiler une image dans un DBImage
    Par kolac dans le forum Bases de données
    Réponses: 1
    Dernier message: 08/04/2006, 13h45

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