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

 Java Discussion :

Obtenir la position d'un Dessin dans mon JPanel


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Homme Profil pro
    Inscrit en
    Janvier 2014
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2014
    Messages : 9
    Par défaut Obtenir la position d'un Dessin dans mon JPanel
    Je suis entrain de faire une application semblable au Tetris mais qui n'en est pas un. Mon objectif est d'effectuer une chute de cases.
    Mon souci c'est qu'une case ne doit pas en chevaucher une autre.
    Pour cela j'ai créer une fonction qui doit vérifier si une case est déjà dans la colonne sur laquelle je veux envoyer la prochaine case et si tel est le cas, il récupère sa coordonnée en y mais ça ne fonctionne pas, voici le code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    public int caseplushaute(int x){
        int y = 0;
        int i = 0 ;
        while(i!=container.getHeight()){
            if(container.getComponentAt(x,i) instanceof Case){
                y = i;
            }
            else{ y=-1;//pas de case dans la colonne
            i++;
            }
        }
        return y;//la case la plus haut a une coordonnée en y = i ou -1
    }

  2. #2
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 483
    Par défaut
    Déjà tu devrais sortir de ta boucle dès que tu trouve ta case, sinon les boucle suivantes vont remettre y à -1. Ensuite, ce n'est pas la méthode la plus propre our faire. Savoir si un case est libre ou pas, c'est un problème de ton moteur de jeu. Il ne devrait pas avoir besoin de savoir comment se fait l'affichage pour connaitre l'état. Si demain tu te rends compte que c'est plus facile de dessiner vias paintComponent toute l'interface plutot que de faire plein d'éléments que tu tente vaille que vaille de positionner, tout sera à refaire.


    Tu devrais garder un tableau ou une structure quelconque qui te dit où sont les case, plutot que de scanner l'affichage.

  3. #3
    Membre régulier
    Homme Profil pro
    Inscrit en
    Janvier 2014
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2014
    Messages : 9
    Par défaut
    T'as raison pour la boucles. J'ai modifier le code:
    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
     
    public int caseplushaute(Case pen){
        int x = pen.getPosX();
        int y = pen.getPosY();
        int v = 0;
        int i =0;
        while(i!=container.getHeight()){
            if(container.getComponentAt(x,i) instanceof Case){
                v = i;
                break;
            }
            else{ v = -1;//pas de case dans la colonne
                  i++;
            }
        }
        return v;//la case a plus haut a une coordonnée en y = y
    }
    Cette méthode n'est pas pour placer des composants dans le JPanel, c'est juste savoir où placer ma prochaine case. Sinon j'utilise une paintComponent qui dessine dans mon conteneur.
    C'est vrai qu'avec un tableau ça aurait été plus simple mais je voulais tenter avec les coordonnées...

    Sinon j'ai une idée qui est de récupérer dans une arraylist les composants de mon conteneur, de caster en Case, et de récupérer les cases qui
    ont les mêmes coordonnées en x, puis de choisir la coordonnée en y la plus grande. Je ne sais pas si ça fonctionnerai.

  4. #4
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 483
    Par défaut
    Citation Envoyé par Koliko Voir le message

    Sinon j'ai une idée qui est de récupérer dans une arraylist les composants de mon conteneur, de caster en Case, et de récupérer les cases qui
    ont les mêmes coordonnées en x, puis de choisir la coordonnée en y la plus grande. Je ne sais pas si ça fonctionnerai.
    Ce serait surement déjà plus performant. Quand tu fais getComponentAt(), java passe sur tous les composant du conteneur pour trouver celui qui matche. Si t'as N case, avec ton code, tu as un temps de O(N*X), alors qu'un problème simple comme le tiens dois pouvoir se résoudre en O(1) (sortir le premier élément de la liste correspondant à ta colonne).

Discussions similaires

  1. [XL-2003] Obtenir la position d'un point dans un graphique
    Par martinmacfly dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 07/01/2010, 15h56
  2. [Debutant]Dessiner dans plusieurs JPanels. Probleme
    Par ahage4x4 dans le forum AWT/Swing
    Réponses: 5
    Dernier message: 22/05/2006, 13h32
  3. Dessiner dans différents JPanels
    Par N@sH dans le forum Agents de placement/Fenêtres
    Réponses: 2
    Dernier message: 20/05/2005, 16h39
  4. Dessiner dans un JPanel
    Par Oliveuh dans le forum Composants
    Réponses: 5
    Dernier message: 19/07/2004, 13h13

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