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

JavaScript Discussion :

Accès à un attribut d'objet ?


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Inscrit en
    Janvier 2009
    Messages
    598
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 598
    Par défaut Accès à un attribut d'objet ?
    Bonjour,

    J'ai un problème accès à un attribut d'un objet mais je ne sais pas si c'est dû à ma façon de gérer l'objet ou à ma façon de gérer le tableau 2D ou bien encore à une variable publique, donc je vous expose le problème en bas de mon post.
    Je ne sais pas quel attribut mettre entre HTML5 et juste javascript, car le problème n'est pas dû à l'API même j'utilise quand même une fois la fonction draw(), ça me semble être plus un problème de javascript objet qu'un problème d'API.

    1) J'ai une classe Sol()
    2) Après avoir créé l'objet de cette classe, je le place dans une case d'un tableau 2D, case référencée par les index celx,cely
    3) J'ai une boucle qui vérifie l'attribut <stype> de l'objet présent dans chaque case du tableau 2D, afin de vérifier s'il contient bien la valeur placée (6), et dans ce cas un sol est dessiné sur le canvas

    Le problème :
    drawimage() semble me montrer (en dessinant le sol sur tout le canvas) que ce sol de valeur 6 est contenu dans toutes les cases du tableau 2D, hors je l'ai bien placé que dans une seule case, celle référencée par celx,cely dans la partie 2 de ce post.

  2. #2
    Rédacteur/Modérateur

    Avatar de SylvainPV
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    3 375
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 3 375
    Par défaut
    Peut-on avoir le code qui encadre la partie 2 ? La création des objets Sol, l'initialisation de celx et cely

  3. #3
    Membre très actif
    Inscrit en
    Janvier 2009
    Messages
    598
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 598
    Par défaut
    Oui bien sûr :

    Création de l'objet sol :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    // Création de l'objet sol.
    lesol=new Sol();
    Pour l'initialisation des variables celx,cely c'est plus compliqué :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    // Calcule la position celx,cely en nombre de cases, de la case cliquée.
    function positionne(event)
    {
    var x = event.clientX;
    var y = event.clientY;
    // Calcule la position col,lig (en pixels) du click sur le plan d'affichage.
    var col=x-colplan;
    var lig=y-ligplan;
    }
    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
     
    function quel(event)
    {
    positionne(event);
    if(event.which==1)
       {
       // Bouton gauche pressé : Dessine le tile sur la case du plan d'affichage.
       dessine(celx,cely);
       // Met le tile dans le tableau de la map.
       }
    if (event.which==3)
       {
       // Bouton droit pressé
         for (i=0;i<15;i++)
         {
            for (j=0;j<15;j++)
            {
    {ctxplan.drawImage(imgset,srcX,srcY,largimg,largimg,(i*32),j*32,largimg,largimg);}
            }
         }
       }
     
    }
    Je signale que le dessin de l'objet se fait correctement sur la bonne case de la map avec le click gauche, mais dés que j'utilise le click droit pour vérifier la présence des valeurs, ça dessine sur toute la map comme si le tableau était remplit de la valeur 6 dans l'attribut stype de l'objet.
    C'est pour ça que je ne sais pas si ça vient de la boucle de dessin ou du tableau ou de l'objet ou encore de numtile qui est contient aussi la valeur 6 et qui est publique.
    Numtile a servi lors du click gauche (positionne()) pour mettre la valeur dans la case cliquée (voir partie 2).

    Il y a un effet qui peut peut-être donner des indices :
    Quand je sélectionne un sol (le 6 ici) et que je fasse "click gauche" sur la map le sol se dessine bien sur la case cliquée, mais si après avoir sélectionné mon sol (ici le sol 6) je fait "click droit" au lieu du gauche, sur la map, alors il ne se passe rien, ni remplissage de la map ni dessin d'une case.
    Quoique cet effet s'explique par la condition supérieur que j'ai mis dans la boucle de la fonction draw().
    Mais ça n'explique pas pourquoi la map est entierement remplie du sol quand je clique du droit apres avoir cliqué du gauche sur la map.

  4. #4
    Rédacteur/Modérateur

    Avatar de SylvainPV
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    3 375
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 3 375
    Par défaut
    Il y a des problèmes de scope, tes variables celx et cely sont globales donc elles valent la même chose partout. A lire : http://syllab.fr/projets/web/exposejs/#9

    Aussi return celx,cely; est impossible en JS, on ne renvoie qu'une seule variable.

  5. #5
    Membre très actif
    Inscrit en
    Janvier 2009
    Messages
    598
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 598
    Par défaut
    Aaaah je te remercie beaucoup pour ces infos !

    Je vais tester

    Je suppose que si je veux envoyer en retour celx et cely en même temps, il va me falloir les mettre en un petit tableau ou un petit objet.

  6. #6
    Rédacteur/Modérateur

    Avatar de SylvainPV
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    3 375
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 3 375
    Par défaut
    Exact :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    return {
       celx: 1,
       cely: 2
    };

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

Discussions similaires

  1. Simulation de POO : accès aux attributs privés d'un objet
    Par Bleys dans le forum Général JavaScript
    Réponses: 12
    Dernier message: 16/12/2010, 21h24
  2. Accès aux attributs d'un objet
    Par JeanMi66 dans le forum Débuter avec Java
    Réponses: 9
    Dernier message: 09/07/2008, 14h17
  3. Accès indirect attribut objet
    Par barnoufal dans le forum Ruby
    Réponses: 3
    Dernier message: 26/05/2008, 09h13
  4. Accés à un attribut d'un objet d'une liste
    Par root76 dans le forum Struts 1
    Réponses: 1
    Dernier message: 27/12/2007, 18h40
  5. [POO] Acces aux attributs d'un objet depuis une methode evenement :s
    Par NikoGJ dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 13/07/2006, 19h01

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