Forums : Xul, Xbl, JS...

Aller à la discussion :  Plus récente Plus ancienne

# Comportement étrange de stack

Envoyé par : Elminster

Date : 19/06/2006 04:52

J'ai remarqué un comportement étrange de la balise stack. Je suis entrain de programmer un jeu de bomberman et pour cela je comptais utiliser la balise stack pour pouvoir afficher l'image d'une case et celle d'une bombe ou d'un autre élément du jeu par dessus.

J'ai géré l'affichage avec les fonctions DOM or il se trouve que lorsque je créé un nouveau fils à un noeud stack ( une image dans mon cas ), ce dernier possède des éléments du noeud fils précédent.

Voici donc mes fonctions de test

 function ajout()
 {
   var noeud = document.getElementById("c0101");
   var img = document.createElement("image");
   image.setAttribute("class","mur");
   noeud.appendChild(img);
 }

La fonction ajout créé donc un nouvel élément image dont elle affecte l'attribut class à "mur" ( attribut class qui définit l'image à afficher ) puis l'ajoute à l'élément stack ( dont l'id est ici "c0101" ) Or ce dernier n'affecte pas "mur" à la classe mais "case" qui est la classe de l'image que contient déja le stack. Je suis donc obligé d'utiliser une autre fonction pour réaffecter la bonne valeur.

 function modifier()
 {
   var noeud = document.getElementById("c0101");
   var img = noeud.childNodes;
   var image = img[1];
   image.removeAttribute("class");
   image.setAttribute("class","mur");
 }

Le fait de rajouter un removeAttribute pour l'attribut class dans ma fonction d'ajout ne change rien.

Que j'affiche ma page sous Firefox 1.5.0.4 ou bien sous XulRunner 1.8.0.1, le résultat est le même.

Aurais je fait une erreur, est ce un bug ou bien est ce le comportement normal de la balise stack ?

# Re: Comportement étrange de stack

Envoyé par : chBok

Date : 19/06/2006 09:26

Ce n'est peut être rien, mais tu as écrit image.setAttribute("class","mur"); au lieu de img.setAttribute("class","mur");

# Re: Comportement étrange de stack

Envoyé par : Elminster

Date : 19/06/2006 11:19

Effectivement, petite erreur d'étourderie ma part mais même avec la modification, le comportement reste le même.

Voici ma fonction qui affiche la grille de départ, des fois que ca puisse venir de là.

 function viewGrid()
 {
   var grid = document.getElementById("gamegrid");
   var columns = document.createElement("columns");
   grid.appendChild(columns);
   for ( var i = 0 ; i < colonne ; i++ )
   {
     var column = document.createElement("column");
     columns.appendChild(column);
   }
   var rows = document.createElement("rows");
   grid.appendChild(rows);
   for ( var i = 0 ; i < ligne ; i++ )
   {
     var row = document.createElement("row");
     rows.appendChild(row);
     for ( var j = 0 ; j < colonne ; j++ )
     {
       var stack = document.createElement("stack");
       var id = setIdCase( i, j );
       stack.setAttribute("id",id);
       var image = document.createElement("image");
       if ( tabGrid[i][j] == "M" )
       {
         image.setAttribute("class","mur");
       }
       else if ( tabGrid[i][j] == "V" )
       {
         image.setAttribute("class","case");
       }
       stack.appendChild(image);
       row.appendChild(stack);
     }
   }
 }

Donc cette fonction créé dans un premier temps les colonnes puis les lignes ou la class des images dépend de la valeur de la case dans le tableau.

 function setIdCase ( x, y )
 {
   var id = "c";
   if ( x < 10 )
   {
     id += "0";
   }
   id += x;
   if ( y < 10 )
   {
     id += "0";
   }
   id += y;
   return id;
 }

La fonction setIdCase permet de générer l'identifiant d'un stack en fonction de ses coordonnées mais pour que tous les identifiants aient le même nombre de caractères.

Il n'est plus possible de poster des messages dans ce forum.


Copyright © 2003-2013 association xulfr, 2013-2016 Laurent Jouanneau - Informations légales.

Mozilla® est une marque déposée de la fondation Mozilla.
Mozilla.org™, Firefox™, Thunderbird™, Mozilla Suite™ et XUL™ sont des marques de la fondation Mozilla.