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

Android Discussion :

Gérer différents objets dans mon onTouchEvent


Sujet :

Android

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Etudiant
    Inscrit en
    Septembre 2016
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Etudiant

    Informations forums :
    Inscription : Septembre 2016
    Messages : 51
    Par défaut Gérer différents objets dans mon onTouchEvent
    Bonjour,

    Je suis en train de créer un programme où différents objet apparaissent sur l'écran et se déplace.

    J'aimerais que dès que l'on clique sur un des objets une action se réalise. Pour l'instant seul le premier objet qui apparaît est géré par la fonction que voici :

    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
    // Gère les touchés sur l'écran
       @Override
       public boolean onTouchEvent(MotionEvent event) {
           int currentX = (int)event.getX();
           int currentY = (int)event.getY();
     
           switch (event.getAction()) {
     
               // code exécuté lorsque le doigt touche l'écran.
               case MotionEvent.ACTION_DOWN:
                   // si le doigt touche l'objet :
                   for (int i = 0; i < tabMonstre.size(); i++) {
     
                       Log.i("Monstre,", " num : " + i);
                       //si les coordonnées du toucher correspondent à la position de l'objet
                       if (currentX >= tabMonstre.get(i).getX() &&
                               currentX <= tabMonstre.get(i).getX() + tabMonstre.get(i).getBalleW() &&
                               currentY >= tabMonstre.get(i).getY() && currentY <= tabMonstre.get(i).getY() + tabMonstre.get(i).getBalleH()) {
                           // on arrête de déplacer la balle
                        tabMonstre.remove(i);
                           score++;
     
                       }
     
                       break;
                   }
           }
     
           return true;  // On retourne "true" pour indiquer qu'on a géré l'évènement
       }
    Mes objet sont stocké dans une liste "tabMonstre" et à chaque fois que je touche l'objet il est censé disparaître et cela le fait seulement à celui d'id 0

    Avez vous une idée ?

    Merci d'avance.

  2. #2
    Membre Expert Avatar de jeffray03
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2008
    Messages
    1 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 501
    Par défaut
    salut
    comment as-tu crée les objects de tabMonstre?

    eric

  3. #3
    Membre confirmé
    Homme Profil pro
    Etudiant
    Inscrit en
    Septembre 2016
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Etudiant

    Informations forums :
    Inscription : Septembre 2016
    Messages : 51
    Par défaut
    Citation Envoyé par jeffray03 Voir le message
    salut
    comment as-tu crée les objects de tabMonstre?

    eric
    Grâce à une fonction :

    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
    public void creerMonstre() {
     
             Monstre monstre = new Monstre(this.getContext());
     
             Random random = new Random();
             int y = random.nextInt(5000);
             if (y < 100) {
                 Random rand = new Random();
                 monstre.resize(metrics.widthPixels, metrics.heightPixels);
                 monstre.setSpeedY(metrics.heightPixels / 100);
     
                     int x = rand.nextInt(metrics.widthPixels - monstre.getBalleW());
                 monstre.setX(x);
     
                 if (tabMonstre.size() > 0) {
                     if (x > (tabMonstre.get(tabMonstre.size() - 1).getX() + tabMonstre.get(tabMonstre.size() - 1).getBalleW()) || x < (tabMonstre.get(tabMonstre.size() - 1).getX() - tabMonstre.get(tabMonstre.size() - 1).getBalleW()))
                         tabMonstre.add(monstre);
                     else {
                         return;
                     }
                 } else {
                     tabMonstre.add(monstre);
                 }
             }
                 else {
                     return;
                 }
     
         }
    (J'utilise une valeur random pour l'apparition entre 0 et 5000 seul les valeur en dessous de 100 crée un monstre, en passant si tu as un meilleur moyen je suis preneur )

    Cette fonction est ensuite appelé dans un thread d'une autre classe :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     while (running)
            {
                // horodatage actuel
              //  startTime = System.currentTimeMillis();
     
                // mise à jour du déplacement des ojets dans GameView.update()
                synchronized (view.getHolder()) {
                    view.update();
                    view.creerMonstre();
                    }

  4. #4
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Salut,

    Le problème vient du break :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    for (int i = 0; i < tabMonstre.size(); i++) {
     
        Log.i("Monstre,", " num : " + i);
        //si les coordonnées du toucher correspondent à la position de l'objet
        if (currentX >= tabMonstre.get(i).getX() && currentX <= tabMonstre.get(i).getX() + tabMonstre.get(i).getBalleW() && currentY >= tabMonstre.get(i).getY() && currentY <= tabMonstre.get(i).getY() + tabMonstre.get(i).getBalleH()) {
            // on arrête de déplacer la balle
            tabMonstre.remove(i);
            score++;
        }
        break;
    }
    On teste une condition et on sort (toujours) de la boucle : donc on ne boucle que sur le premier index (il est impossible qu'un autre index soit traité). Il faut mettre le break dans le test :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    for (int i = 0; i < tabMonstre.size(); i++) {
     
        Log.i("Monstre,", " num : " + i);
        //si les coordonnées du toucher correspondent à la position de l'objet
        if (currentX >= tabMonstre.get(i).getX() && currentX <= tabMonstre.get(i).getX() + tabMonstre.get(i).getBalleW() && currentY >= tabMonstre.get(i).getY() && currentY <= tabMonstre.get(i).getY() + tabMonstre.get(i).getBalleH()) {
     
            // on arrête de déplacer la balle
            tabMonstre.remove(i);
            score++;
            break;
     
        }
     
    }
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  5. #5
    Membre confirmé
    Homme Profil pro
    Etudiant
    Inscrit en
    Septembre 2016
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Etudiant

    Informations forums :
    Inscription : Septembre 2016
    Messages : 51
    Par défaut
    Merci beaucoup je n'avais pas pensé à ça

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Gérer l'usb dans mon OS 100% assembleur
    Par Factorisable dans le forum x86 32-bits / 64-bits
    Réponses: 3
    Dernier message: 31/07/2016, 16h39
  2. Accéder à un objet dans mon code
    Par limarys dans le forum C++
    Réponses: 1
    Dernier message: 03/12/2015, 18h49
  3. comment organiser les différents objets dans l'interaface
    Par étudiante_info dans le forum Android
    Réponses: 2
    Dernier message: 23/03/2011, 14h23
  4. [1.x] Création de plusieurs objets dans mon action.class.php
    Par lijko dans le forum Symfony
    Réponses: 2
    Dernier message: 30/12/2007, 13h37
  5. VBA-E Recherche des différents noms dans mon tableau excel
    Par tazmania dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 16/04/2007, 19h31

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