Récupération Array onPress

Résolu
Orange73 Messages postés 1375 Date d'inscription dimanche 28 novembre 2004 Statut Membre Dernière intervention 2 août 2011 - 10 déc. 2008 à 22:53
crackter Messages postés 401 Date d'inscription mercredi 12 novembre 2003 Statut Membre Dernière intervention 31 janvier 2010 - 12 déc. 2008 à 00:32
Hello,

Voila je block sur un truc que je savai faire... mais je me souviens plus LOL.

Je n'arrive plus a faire afficher mon trace :

var nbItems = 6;
var spaceY = 10;
var baseY = 10;

for(i=0;i<nbItems;i++){
    myArray = new Array();
    myArray[i] = this.attachMovie("btn","btn"+i,i);
    myArray[i]._x = 20;
    myArray[i]._y = baseY;
    baseY += myArray[i]._height + spaceY;
   
    myArray[i].baseItemY = myArray[i]._y;
   
    myArray[i].onPress = function(){
        trace(myArray[3]._name);
    }
}

Petite aide plz

11 réponses

crackter Messages postés 401 Date d'inscription mercredi 12 novembre 2003 Statut Membre Dernière intervention 31 janvier 2010
12 déc. 2008 à 00:21
monclip.onPress=function() {
  for (var val:String in myArray) {
    if (myArray[val].id>this.id) myArray[val]._x +=10;
  }
}

monclip.onPress=function() {
  for (var i:Number=0;i<myArray.length;i++) {
    if (myArray[i].id>this.id) myArray[i]._x +=10;
  }
}
3
crackter Messages postés 401 Date d'inscription mercredi 12 novembre 2003 Statut Membre Dernière intervention 31 janvier 2010
10 déc. 2008 à 23:24
salut,

c'est comme d'habitude un soucis de portée de variable.
Il faut créer l'array en dehors de la boucle car le garbage collector efface le tableau.

donc :

var myArray=new Array();
for (var i:Number=0;i<nbItems;i++) {
myArray.push(....);
...
...
}
0
Orange73 Messages postés 1375 Date d'inscription dimanche 28 novembre 2004 Statut Membre Dernière intervention 2 août 2011
10 déc. 2008 à 23:37
Ok merci, tu as raison.

juste pour confirmation, dans mon exemple, je dois pas faire de push ?

cela suffit ?

var nbItems = 6;
var spaceY = 10;
var baseY = 10;
var myArray = new Array();

for(i=0;i<nbItems;i++){ 
    myArray[i] = this.attachMovie("btn","btn"+i,i);
    myArray[i]._x = 20;
    myArray[i]._y = baseY;
    baseY += myArray[i]._height + spaceY;
   
    myArray[i].baseItemY = myArray[i]._y;
   
    myArray[i].onPress = function(){
        trace(myArray[3]._name);
    }
}
Comment tu aurais fait toi ?
0
Orange73 Messages postés 1375 Date d'inscription dimanche 28 novembre 2004 Statut Membre Dernière intervention 2 août 2011
11 déc. 2008 à 00:13
Sinon comment je peux faire pour recuperer l'array entier (en rouge) dans ma fonction onPress ?

J'ai testé sa... marche po... normal plus de boucle.

for(i=0;i<nbItems;i++){ 
    myArray.push(this.attachMovie("btn","btn"+i,i));
    myArray[i]._x = 20;
    myArray[i]._y = baseY;
    baseY += myArray[i]._height + spaceY;
   
    myArray[i].baseItemY = myArray[i]._y;
   
    myArray[i].onPress = function(){
        trace(myArray[i]._name);
    }
}
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Orange73 Messages postés 1375 Date d'inscription dimanche 28 novembre 2004 Statut Membre Dernière intervention 2 août 2011
11 déc. 2008 à 00:28
myArray[i].onPress = function(){
        trace(myArray);
    }

Maintenant je souhaiterai faire une condition dans ce onPress :

if( myArray[i].id > this.id ){
    // blablabla
}





Bien sur sa marche pas xD... comment puis-je faire ?
0
crackter Messages postés 401 Date d'inscription mercredi 12 novembre 2003 Statut Membre Dernière intervention 31 janvier 2010
11 déc. 2008 à 12:41
Salut,

toujours pareil :). le myArray[i].onPress, la fonction d'onpress va "pointer" sur myArray[i], donc i n'est plus connue puisqu'il appartenait à la boucle. Soit tu met une valeur fixe à la place de i, soit tu utilises une variable "temp" à la création du genre myArray[i].tag=i
0
Orange73 Messages postés 1375 Date d'inscription dimanche 28 novembre 2004 Statut Membre Dernière intervention 2 août 2011
11 déc. 2008 à 16:00
Hello,
merci pour ta reponse :)

mais c'est ce que j'ai essayer de faire :

myArray[i].id = i;

myArray[i].onPress = function(){
       if( myArray[i].id > this.id ){
           // blablabla
      }
}

sa marche pas quand meme du fait que je souhaite executer un script seulement pour les elements de myArray qui sont une id superieur a l'element myArray cliké... !
0
crackter Messages postés 401 Date d'inscription mercredi 12 novembre 2003 Statut Membre Dernière intervention 31 janvier 2010
11 déc. 2008 à 22:59
myArray[i].id = i;


myArray[i].onPress = function(){
      
if( myArray[ i
].id > this.id ){
           // blablabla
      }


}

le i dans le onPress est indéfinie, même si tu l'a créé dans la boucle.

En fait il est créé dans la boucle, il existe bien à ce moment là, mais au moment où on press l'élément contenu dans myArray, i est undefined, donc cela correspond à un myArray[undefined] donc undefined > this.id, et forcément ça pose quelques soucis :).

Je ne comprend pas pourquoi tu veux comparer myArray[i].id et this.id puisque dans la logique que tu veux employer, les 2 sont forcément équivalents. Si i vaut 2 tu voudrais faire :

myArray[2].id =2;
myArray[2].onPress=function() {
  if (myArray[2].id>this.id) { // donc this.id>this.id (puisqu'on est dans le onpress de myArray[2], donc 2>2, donc il ne pourra jamais être lancé.
    //
  }
}

il faudrait que tu essaye plutot une variable qui sauvegarde le clip dernièrement cliqué, ou son id. Essaye un truc du genre :


var nbItems:Number = 6;
var spaceY:Number = 10;
var baseY:Number = 10;
var
myArray:Number = new Array();
var lastClick:Number = -1;


for(var i:Number=0;i<nbItems;i++){ 
  var monclip:MovieClip = this.attachMovie("btn","btn"+i,i);  monclip._x 20;  monclip._y baseY;
  baseY += monclip._height + spaceY;
  monclip.baseItemY = monclip._y;
  monclip.onPress=function() {
    if (lastClick<this.id) {
      lastClick=this.id;
      //instructions...
    }
  }
  myArray.push(monclip);
}
0
Orange73 Messages postés 1375 Date d'inscription dimanche 28 novembre 2004 Statut Membre Dernière intervention 2 août 2011
11 déc. 2008 à 23:38
merci pour ta reponse mais mon probleme n'est pas car je sais faire tous cela

en fait mon but est de faire bouger tout mes boutons de _x + 10 dont l'id est > au bouton cliqué...

je pense au'il faut que je repasse par une boucle for dans mon onPress ou alors for in si j'utilise un tablequ...

je voit pas d'autre solution... Et toi ?
0
Orange73 Messages postés 1375 Date d'inscription dimanche 28 novembre 2004 Statut Membre Dernière intervention 2 août 2011
12 déc. 2008 à 00:26
Ouai c'est ce que je pensais... a tester :-)

A+ et merci
0
crackter Messages postés 401 Date d'inscription mercredi 12 novembre 2003 Statut Membre Dernière intervention 31 janvier 2010
12 déc. 2008 à 00:32
de rien amuse toi bien ;).
0
Rejoignez-nous