Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > Flash/Flex > Flash > AS1/AS2
AS1/AS2 Questions relatives à la programmation ActionScript 1 et 2 (Cours AS2)
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 08/04/2008, 12h55   #1
Invité de passage
 
Inscription : avril 2008
Messages : 10
Détails du profil
Informations forums :
Inscription : avril 2008
Messages : 10
Points : 2
Points : 2
Par défaut ActionScript 2 Manipuler plusieurs clips créés avec une boucle for

Bonjour à tous.
Je suis un graphiste qui connaît quelques notions de flash qui s'apparente le plus souvent à de la bidouille, ce qui fait que parfois, je n'y arrive pas du tout. Un ami informaticien, m'a parlé de ce site en me disant tout le bien du monde, donc j'entre timidement mais sereinement vous demander de l'aide.
Je veux créer un clip qui va mettre à la suite plein d'images sur une ligne qu'il a récupérer dans un dossier via un fichier XML. Pour l'instant, j'arrive à piocher les images (et c'est pas sans fierté B) ) et à les afficher. Mais voilà, ce que je n'arrive pas à faire c'est créer plein de clip avec une boucle for et les manipuler:
Code :
1
2
3
4
5
6
bouton1.onRelease=function() 
{ largeur = 0; 
for (i = 0; i<19; i++) 
{ _root.createEmptyMovieClip("mc_img"+i,0); 
monmcl.loadClip("images/" + images[i],"mc_img"+i);
 _root["mc_img"+i]._x = largeur; largeur = largeur + ["mc_img"+i]._width; } }
Quelques explication:
- monmcl est un movieClipLoader défini plus haut dans le code.
- ce que je veux, c'est:
1. faire un clip dans lequel je met ma première image dont le nom est stocké dans le tableau images[]
2. déterminer la largeur de l'image pour ensuite la placer juste à droite des précédentes.
Merci beaucoup à vous.
adinx est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/04/2008, 19h28   #2
Rédacteur/Modérateur
 
Avatar de beekeep
 
Homme
Développeur informatique
Inscription : octobre 2006
Messages : 1 606
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 26
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : octobre 2006
Messages : 1 606
Points : 2 233
Points : 2 233
Salut adinx et bienvennue sur Developpez.net

je vois que ton code est presque bon.

il y a une erreur sur le gestion des niveaux lorsque tu crées tes clips vides,
utilise la fonction MovieClip.getNextHighestDepth pour récupérer le niveau au dessus de tout les autres.

sinon tu peux aussi créer un tableau pour tes clips :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
var images:Array = new Array();
var clipsImages:Array = new Array();
 
bouton1.onRelease=function() 
{
 var largeur:Number = 0; 
 for (i = 0; i<images.length; i++) 
 {
  var tmpClip:MovieClip = _root.createEmptyMovieClip("mc_img"+i, _root.getNextHighestDepth());
  clipsImages.push( tmpClip );
  monmcl.loadClip("images/" + images[i], tmpClip);
  tmpClip._x = largeur;
  largeur += tmpClip._width;
 }
};
beekeep est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/04/2008, 09h08   #3
Invité de passage
 
Inscription : avril 2008
Messages : 10
Détails du profil
Informations forums :
Inscription : avril 2008
Messages : 10
Points : 2
Points : 2
Tout d'abord, merci de ton aide salvateur.
Les niveaux, j'avais pas très bien compris les niveaux, mais ok je vois maintenant.
Donc maintenant, il charge bien toutes les images (ce qui est plutôt sympathique). Le problème c'est qu'il les superpose toutes. Il considère que _root["mc_img"+i]._x = 0 donc mon largeur est toujours à 0.
J'imagine qu'il considère que le clip n'a pas de largeur, c'est l'image qui est chargé dedans qui en a une.
J'avais essayé avec les tableaux, mais je préfère m'en passer, j'ai un peu de mal avec ça.
adinx est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/04/2008, 10h26   #4
Rédacteur/Modérateur
 
Avatar de beekeep
 
Homme
Développeur informatique
Inscription : octobre 2006
Messages : 1 606
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 26
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : octobre 2006
Messages : 1 606
Points : 2 233
Points : 2 233
Lut,

en fait il faut effectuer le positionnement une fois l'image chargée (sinon la largeur est nulle),

tu peux définir la fonction LoadInit de ton MovieClipLoader et le faire dans cette fonction.
beekeep est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/04/2008, 13h09   #5
Invité de passage
 
Inscription : avril 2008
Messages : 10
Détails du profil
Informations forums :
Inscription : avril 2008
Messages : 10
Points : 2
Points : 2
Youhou, merci ça marche Tadadadadam. Héhé, je suis trop content. Tu me sauves la vie. Je faisais avec un LoadComplete mais visiblement LoadInit, c'est pareil mais ça marche. Je voudrais bien une explication pour comprendre.
A titre d'information pour ceux qui aurait le même problème que moi, voici le code:
Code :
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
monlv = new LoadVars();
monlv.onLoad=function(etat){ 
	if (etat){
		images=this.liste.split(",");
		monmcl = new MovieClipLoader();
		_root.createEmptyMovieClip("mc_img",0);
		emcl = new Object();
		emcl.onLoadError=function(cible,errorcode){
				trace("erreur de chargement d'une image dans : " + cible._name + " code erreur : " + errorcode);
				}
		emcl.onLoadInit=function(cible){
				trace("chargement de l'image ok dans : " + cible._name+" dont la taille est = "+getMCWidth(cible));
		}
		monmcl.addListener(emcl);
	}else{ 
		trace("erreur de chargement de la liste d'images     ");
	}
	bouton1.onRelease=function() { 
		largeur = 0; 
 
		for (i = 1; i<19; i++) 
			{ 
 
			_root.createEmptyMovieClip("mc_img"+i,_root.getNextHighestDepth()); 
			monmcl.loadClip("images/" + images[i],"mc_img"+i);
			_root["mc_img"+i]._x = largeur; 
 
 
			largeur + ["mc_img"+i]._width; 
			} 
	}
function getMCWidth(target_mc:MovieClip):Number {
    return target_mc._width;
	}
}
monlv.load("liste_images.txt");
le fichier liste_images.txt, je voulais m'en servir au début, mais j'essaie déjà de faire le reste avant.
Youplaboum
adinx est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/04/2008, 13h45   #6
Rédacteur/Modérateur
 
Avatar de beekeep
 
Homme
Développeur informatique
Inscription : octobre 2006
Messages : 1 606
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 26
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : octobre 2006
Messages : 1 606
Points : 2 233
Points : 2 233
Citation:
Envoyé par adinx
Je faisais avec un LoadComplete mais visiblement LoadInit, c'est pareil mais ça marche. Je voudrais bien une explication pour comprendre.
Citation:
Code :
onLoadComplete = function([target_mc:MovieClip], [httpStatus:Number]) {}
Appelé lorsque le fichier qui a été chargé avec MovieClipLoader.loadClip() a fini son téléchargement.

Code :
onLoadInit = function([target_mc:MovieClip]) {}
Appelé une fois les actions de la première image du clip chargé exécutées.
beekeep est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/04/2008, 14h47   #7
Invité de passage
 
Inscription : avril 2008
Messages : 10
Détails du profil
Informations forums :
Inscription : avril 2008
Messages : 10
Points : 2
Points : 2
héhé merci
adinx est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/04/2008, 15h01   #8
Invité de passage
 
Inscription : avril 2008
Messages : 10
Détails du profil
Informations forums :
Inscription : avril 2008
Messages : 10
Points : 2
Points : 2
Un autre problème.
Maintenant, il affiche bien mes images, mais elles ne le sont pas à 100% (ça se voit facilement en ouvrant l'image avec un autre programme et en supperposant), elles sont un peu plus petite (env.70%).
Comment ça se fait?
adinx est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 14h57.


 
 
 
 
Partenaires

Hébergement Web