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 :

Plusieurs canvas, seulement le dernier s'affiche


Sujet :

JavaScript

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Septembre 2012
    Messages : 9
    Points : 6
    Points
    6
    Par défaut Plusieurs canvas, seulement le dernier s'affiche
    Salut,

    Je développe actuellement un éditeur de map isométrique en javascript et depuis hier je suis confronter à un problème :

    Voici une classe "Annimation"
    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
     
    var Annimation = function(_id, _nom, _img, _ct_x, _ct_y, m_x, m_y, m_w, m_h, _speed, _nb_image) //image, centre x et y de l'Annimation, masque, vitesse, nombre d'images (1)
    	{
    		var id = _id;
    		var name = _nom;
    		var sprite = _img;
    		var centre_x = _ct_x;
    		var centre_y = _ct_y;
    		var x_orig = m_x;
    		var y_orig = m_y;
    		var x_size = m_w;
    		var y_size = m_h;
     
    		var nb_image = _nb_image;
    		var speed = _speed;
    		var i = 0;
     
    		this.draw = function (_context, _x ,_y)
    		{
     
    			//_context.drawImage(sprite, _x-centre_x, _y-centre_y);
    			_context.drawImage(sprite, x_orig,y_orig+(Math.floor(i)*y_size), x_size, y_size, _x-centre_x, _y-centre_y, x_size, y_size);
    			i+=speed;
    			if(i >= nb_image)
    			{
    				i = 0;
    			}
     
    		}
     
    		this.getName = name;
    		this.getId = id;
    		this.getWidth = x_size;
    		this.getHeight = y_size;
    		this.getCentreX = centre_x;
    		this.getCentreY = centre_y;
    	}
    Je commence à créer un objet Array() -> listePics puis le remplir avec des objet de la classe annimation,

    J'ai d’abord tenté de créer une boucle parcourant listePics, et affichant pour chaque itération le nom d'une pic (objet de annimation/une image quoi) et de créer un canvas de la bonne taille pour afficher la pic dedans le tout à l'interieur d'un div : "decor_selector", le nom de chaques pics apparait correctement, mais seulement le dernier canvas affiche un dessin. J'ai donc retirer la boucle et tout écrit en brut pour tester... hé bien toujours pareil, il n'y a que le dernier canvas de dessiné :'(
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    document.getElementById("decor_selector").innerHTML += " "+listePics[1].getName+"<br><canvas id='canvas"+listePics[1].getId+"' width='"+listePics[1].getWidth+"' height='"+listePics[1].getHeight+"'></canvas><br>";
    listePics[1].draw(document.getElementById('canvas'+listePics[1].getId).getContext("2d"),listePics[1].getCentreX,listePics[1].getCentreY);
     
    document.getElementById("decor_selector").innerHTML += " "+listePics[2].getName+"<br><canvas id='canvas"+listePics[2].getId+"' width='"+listePics[2].getWidth+"' height='"+listePics[2].getHeight+"'></canvas><br>";
    listePics[2].draw(document.getElementById('canvas'+listePics[2].getId).getContext("2d"),listePics[2].getCentreX,listePics[2].getCentreY);
     
    document.getElementById("decor_selector").innerHTML += " "+listePics[3].getName+"<br><canvas id='canvas"+listePics[3].getId+"' width='"+listePics[3].getWidth+"' height='"+listePics[3].getHeight+"'></canvas><br>";
    listePics[3].draw(document.getElementById('canvas'+listePics[3].getId).getContext("2d"),listePics[3].getCentreX,listePics[3].getCentreY);
    Notez que lorsque je commente le dernier bloque des trois, c'est seulement le deuxième canvas qui est dessiné et pas le premier.
    Pourquoi seulement le dernier ?! <- voyez comme je suis triste !

  2. #2
    Membre expérimenté
    Homme Profil pro
    bricoleur par les mots
    Inscrit en
    Avril 2015
    Messages
    726
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : bricoleur par les mots
    Secteur : Distribution

    Informations forums :
    Inscription : Avril 2015
    Messages : 726
    Points : 1 631
    Points
    1 631
    Par défaut
    jour

    un id doit etre unique et la tous tes canvas ont le meme id

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Septembre 2012
    Messages : 9
    Points : 6
    Points
    6
    Par défaut
    Ce n'est pas ça, voici le résultat sur Firefox :

    Nom : Sans titre 19.jpg
Affichages : 246
Taille : 32,5 Ko

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Septembre 2012
    Messages : 9
    Points : 6
    Points
    6
    Par défaut
    J'ai finalement trouver un solution : d'abord un boucle pour créer les éléments html, ensuite une pour dessiner dans chaque éléments. Si quelqu'un à une idée de pourquoi cela ne fonctionne pas avec une seul boucle qu'il le fasse savoir !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    for(i=0; i<listePics.length; i++)
    {
    	document.getElementById("decor_selector").innerHTML += " "+listePics[i].getName+"<br><canvas id='canvas"+listePics[i].getId+"' width='"+listePics[i].getWidth+"' height='"+listePics[i].getHeight+"'>   </canvas><br>";
     
    }
    for(i=0; i<listePics.length; i++)
    {
    	listePics[i].draw(document.getElementById('canvas'+listePics[i].getId).getContext("2d"),listePics[i].getCentreX,listePics[i].getCentreY);
    }

  5. #5
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 110
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 110
    Points : 44 921
    Points
    44 921
    Par défaut
    Bonjour,
    passe par les méthodes du DOM plutôt que par innerHTML, le moteur de rendu fera dans ce cas un meilleur boulot et tu n'auras pas de surprises désagréables.

    Passe tes éléments <canvas> en display:block cela t'éviteras de mettre des <br> de partout.

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Septembre 2012
    Messages : 9
    Points : 6
    Points
    6
    Par défaut
    Ok, merci pour ton aide

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

Discussions similaires

  1. [WIN32][OpenGL]Rappel du dernier buffer affiché
    Par Invité(e) dans le forum OpenGL
    Réponses: 3
    Dernier message: 12/06/2009, 08h11
  2. Faire afficher seulement le dernier enregistrement
    Par artacus dans le forum Cognos
    Réponses: 9
    Dernier message: 25/04/2009, 18h37
  3. Réponses: 7
    Dernier message: 19/10/2006, 20h06
  4. [JScrollPane][Canvas] L'image ne s'affiche pas
    Par TheReturnOfMuton dans le forum AWT/Swing
    Réponses: 10
    Dernier message: 05/06/2006, 13h17
  5. [MySQL] decallage de la dernieres ligne affiché
    Par jojo77 dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 05/03/2006, 16h27

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