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 21/01/2008, 16h22   #1
Membre régulier
 
Inscription : décembre 2006
Messages : 493
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 493
Points : 90
Points : 90
Par défaut Charger x fois un clip en lignes et colonnes définies

Bonjour, je cherche à charger sur ma scène un même clip x fois, en fonction d'un nombre de ligne et de colonne que je définis au début. J'ai donc essayé de faire une double boucle pour charger la colonne1-ligne1, colonne1-ligne2 ... mais sans succès. Voici le code que j'ai tenté, si vous avez une idée je suis preneur. Merci d'avance.

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
var nbreColonne:Number = 8; // NOMBRE DE COLONNE QUE JE DEFINIS
var colonne:Number = 0; // Initialisation de la variable
var nbreLigne:Number = 8;  // NOMBRE DE LIGNE QUE JE DEFINIS
var ligne:Number = 0; // Initialisation de la variable
var tailleDalle:Number = 160;
 
for(colonne ; colonne<nbreColonne ; colonne++){
	for(ligne ; ligne<nbreLigne ; ligne++){
		load(ligne);
	}
}
 
function load(aIndex:Number) {
	var tmp:MovieClip = this.mcCarte.createEmptyMovieClip("conteneur_"+aIndex, aIndex);
 
	var listener:Object = new Object();
	listener.onLoadInit = initialisation;
 
	var mcl:MovieClipLoader = new MovieClipLoader();
	mcl.addListener(listener);
	var fileName:String = "fonds/BlocFond.swf";
	mcl.loadClip(fileName, tmp);
}
 
function initialisation(aTarget:MovieClip) {
	var currentIndex:Number = Number(aTarget._name.split("_")[1]);
	aTarget._width = tailleDalle;
	aTarget._height = tailleDalle;
	aTarget._x = 160*colonne; // pour que le clip 2 se charge sous le clip 1, ect ...
	aTarget._y = 160*ligne;
}
L'objectif est donc que le clip1 se charge en haut à gauche, le clip 2 en dessous du 1, le 3 en dessous du 2 ... jusqu'au 8, puis le 9 en haut à droite du 1, etc ...
nicolas2603 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/01/2008, 21h51   #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,

dans ce cas tu n'as pas besoin que tel ou tel clip soit au dessus d'un autre vu qu'ils ne se chevauchent pas.

j'ai modifié un peu ton code qui devrai fonctionner mais la façon de faire était bonne.

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
_level0.nbreColonne = 8; // NOMBRE DE COLONNE QUE JE DEFINIS
_level0.nbreLigne = 8;  // NOMBRE DE LIGNE QUE JE DEFINIS
_level0.tailleDalle = 160;
 
for(var c=0;c<nbreColonne;c++)
{
    for(var r=0;r<nbreLigne;r++)
    {
        loadClip(c,r);
    }
}
 
function loadClip(nColumn:Number, nRow:Number)
{
    var tmp:MovieClip = this.mcCarte.createEmptyMovieClip("conteneur_"+nColumn+"-"+nRow, this.mcCarte.getNextHighestDepth());
 
    var listener:Object = new Object();
    listener.onLoadInit = initialisation;
 
    var mcl:MovieClipLoader = new MovieClipLoader();
    mcl.addListener(listener);
    var fileName:String = "fonds/BlocFond.swf";
    mcl.loadClip(fileName, tmp);
}
 
function initialisation(mcTarget:MovieClip, nColumn:Number, nRow:Number)
{
    mcTarget._width =_level0.tailleDalle;
    mcTarget._height = _level0.tailleDalle;
    mcTarget._x = _level0.tailleDalle*nColumn;
    mcTarget._y = _level0.tailleDalle*nRow;
}
;)
beekeep est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/01/2008, 10h18   #3
Membre régulier
 
Inscription : décembre 2006
Messages : 493
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 493
Points : 90
Points : 90
salut ! alors j'ai essayé ton code, mais les différents clips ne se positionnent pas correctement, ils restent tous en 0,0 apparemment dans la fonction initialisation les variables nColumn et nRow sont UNDEFINED !! Par contre au niveau des conteneurs tout se charge nickel. De mon côté entre temps j'ai réussi à faire ce que je voulais, non pas en chargeant un clip externe, mais en attachant le clip préalablement intégré dans la bibliothèque. J'ai fonctionné différemment, au lieu de traiter lignes et colonnes, j'ai déterminé le nombre de fois que je voulais le clip, et j'ai forcé à la ligne en fonction de ça ... Mon code :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
var nbreDalle:Number = 64;
var nbreColonne:Number = 8;
var tailleDalle:Number = 160;
var startX:Number = 0;
var startY:Number = 0;
 
maillage = function () {
	for (var i=1; i<=nbreDalle; i++) {
		this.Carte.attachMovie("dalle", "dalle"+i, i);
		this.Carte["dalle"+i]._x = startX;
		this.Carte["dalle"+i]._y = startY;
		startY += tailleDalle;
		if (startY >= tailleDalle * nbreColonne) {
			startY = 0;
			startX += tailleDalle;
		}
	}
}
 
maillage();
A ton avis, quelle solution vaut-il mieux adopter dans ce genre de situation ?
nicolas2603 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/01/2008, 13h15   #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
Salut,

si le seul changement est de ne pas charger un clip externe mais à partir de la bibliothèque,

tu peux garder le code précédent (en fait c'est comme ça que je l'avais testé)

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
_level0.nbreColonne = 8; // NOMBRE DE COLONNE QUE JE DEFINIS
_level0.nbreLigne = 8;  // NOMBRE DE LIGNE QUE JE DEFINIS
_level0.tailleDalle = 160;
 
for(var c=0;c<nbreColonne;c++)
{
    for(var r=0;r<nbreLigne;r++)
    {
        loadClip(c,r);
    }
}
 
function loadClip(nColumn:Number, nRow:Number)
{
    var tmp:MovieClip = this.mcCarte.createEmptyMovieClip("conteneur_"+nColumn+"-"+nRow, this.mcCarte.getNextHighestDepth());
 
    tmp.attachMovie("dalle", "dalle"+nColumn+"-"+nRow,tmp.getNextHighestDepth());
    initialisation(tmp,nColumn,nRow);
}
 
function initialisation(mcTarget:MovieClip, nColumn:Number, nRow:Number)
{
    mcTarget._width =_level0.tailleDalle;
    mcTarget._height = _level0.tailleDalle;
    mcTarget._x = _level0.tailleDalle*nColumn;
    mcTarget._y = _level0.tailleDalle*nRow;
}
beekeep est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/01/2008, 14h23   #5
Membre régulier
 
Inscription : décembre 2006
Messages : 493
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 493
Points : 90
Points : 90
ok ça fonctionne nickel comme ça ! Abuserais-je en sollicitant ton aide pour une autre question complètement liée à la première ? .

Dans le fonctionnement, j'ai mon clip qui se place donc 64 fois sur la scène, en formant un quadrillage de 8x8 avec pour chaque clip un nom du genre :
_level0.Carte.dalle_0x0
_level0.Carte.dalle_0x1
_level0.Carte.dalle_0x2
(...)
_level0.Carte.dalle_7x5
_level0.Carte.dalle_7x6
_level0.Carte.dalle_7x7.

Sur ma scène j'ai placé également un simple clip carré. Ce que je veux faire c'est que lorsque qu'un des clips "dalle" touche le clip carré, à l'intérieur de ce clip "dalle" se charge une image qui elle est externe. C'est à dire que j'ai 64 images que je vais nommer image_0x0, image_0x1 ... et lorsque la dalle_0x2 touche le carré ça lance le processus de chargement. Pour ça, j'ai mis dans une frame du clip source attaché "dalle" le code suivant :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
 
var visibleDalle:Boolean = false;
 
this.onEnterFrame = function () {
	if (this.hitTest(_root.Carré) && visibleDalle == false) {
		visibleDalle = true;
		load();
	}
}
 
function load() {
	var tmp:MovieClip = this.createEmptyMovieClip("image", this.getNextHighestDepth());
 
	var listener:Object = new Object();
 
	var mcl:MovieClipLoader = new MovieClipLoader();
	mcl.addListener(listener);
	var fileName:String = "fonds/image_0x2.jpg"; // IL FAUT RECUPERER ICI LE NOM DE LA DALLE (ex : "fonds/image_" + NOMDALLE + ".jpg")
	mcl.loadClip(fileName, tmp);
}
Mais comment récupérer le nom de la dalle source afin de savoir quelle image il faut charger ? Merci !
nicolas2603 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/01/2008, 15h33   #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
tu peux mémoriser la ligne et la colonne dans le clip conteneur :

Code :
1
2
3
var tmp:MovieClip = this.mcCarte.createEmptyMovieClip("conteneur_"+nColumn+"-"+nRow, this.mcCarte.getNextHighestDepth());
tmp.col = nColumn;
tmp.row = nRow;
puis les récupérer ensuite pour faire selon :
Code :
1
2
3
4
5
6
7
this.onEnterFrame = function () {
    if (this.hitTest(_root.Carré) && visibleDalle == false) {
        visibleDalle = true;
        trace(_parent.row + " - " + _parent.col);
        load();
    }
}
beekeep est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/01/2008, 17h30   #7
Membre régulier
 
Inscription : décembre 2006
Messages : 493
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 493
Points : 90
Points : 90
GENIAL !!!! Ca fait au moins 2 heures que je suis dessus sans réussir à le faire fonctionner ... quel boulet !! Sérieux, ça fonctionne nickel, je te remercie franchement pour ton aide ++
nicolas2603 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 05h53.


 
 
 
 
Partenaires

Hébergement Web