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
    713
    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 : 713
    Points : 1 597
    Points
    1 597
    Par défaut
    jour

    un id doit etre unique et la tous tes canvas ont le meme id
    Plus vite encore plus vite toujours plus vite.

  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 : 241
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
    16 956
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 16 956
    Points : 44 116
    Points
    44 116
    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