[actionscript] erreur de syntaxe?

erreur de syntaxe? [actionscript] - Flash/ActionScript - Programmation

Marsh Posté le 26-05-2008 à 12:06:12    

bonjour je cherche à faire un script de confettis en actionscript
les confettis ont une position aléatoire, une couleur aleatoire parmi 4 possibilités,une transparence aléatoire, toute les secondes on relance la fonction et tout doit changer or
la position des confettis ne varie pas chez moi, mais bien la couleur et la transparence!
j'arrive pas à piger pourquoi?
c'est surement tout con,
merci à vous
 
function createBall() {
    for (var i:Number=0 ; i<100 ; i++)
    {
       
    var absci =  Math.floor(Math.random()*500); // abscisses
    var ordo =  Math.floor(Math.random()*500);// ordonnées
    var transpa =  Math.floor(Math.random()*99);// transparence en pourcentage
colourChoices = ["0xa93232", "0xFF3200", "0x003200", "0x0056aa"];
chooseColour = colourChoices[Math.floor(Math.random()*colourChoices.length)];
var attachedMc = this.attachMovie("circle",["myCircle"+i],_root.getNextHighestDepth(),{_x:absci, _y:ordo,_alpha:transpa});
var my_color:Color = new Color(["myCircle"+i]);
my_color.setRGB(chooseColour);
}}
 
 
createBall();
setInterval (createBall, 1000);

   

Reply

Marsh Posté le 26-05-2008 à 12:06:12   

Reply

Marsh Posté le 27-05-2008 à 04:35:52    

Pour optimiser un peu tu peux sortir ton tableau de couleur de ta boucle.
 
Ici :
 
var attachedMc = this.attachMovie("circle",["myCircle"+i],_root.getNextHighestDepth(),{_x:absci, _y:ordo,_alpha:transpa});  
Puisque tu utilises this.attachMovie, pourquoi ne pas utiliser aussi this.getNextHighestDepth ?
 
Bref pour ton probleme de position, enleve l'objet a la fin du attachMovie et attribue les paramétres un à un.
 
attachedMc._x = ...
attachedMc ._y etc...


---------------
Jeu de simulation Boursière - Version BETA - https://www.facebook.com/wildstocks
Reply

Marsh Posté le 27-05-2008 à 14:40:42    

j'ai essayé ce que tu dis mais ça ne marche pas mieux...
tu aurais d'autres idées?
merci  
 
function createBall() {
 
 colourChoices = ["0xa93232", "0xFF3200", "0x003200", "0x0056aa"];
 for (var i:Number=0 ; i<100 ; i++)
 {
   
chooseColour = colourChoices[Math.floor(Math.random()*colourChoices.length)];
 var absci =  Math.floor(Math.random()*500); // abscisses
 var ordo =  Math.floor(Math.random()*500);// ordonnées
 var transpa =  Math.floor(Math.random()*99);// transparence en pourcentage
 
var attachedMc = this.attachMovie("circle",["myCircle"+i],this.getNextHighestDepth());
attachedMc._x = absci;
attachedMc._y = ordo;
attachedMc._alpha = transpa;
 
var my_color:Color = new Color(["myCircle"+i]);
my_color.setRGB(chooseColour);
 
 
 
}
 
 
 
}
 
 
createBall();
setInterval (createBall, 1000);

Reply

Marsh Posté le 27-05-2008 à 14:56:34    

ton code n'est pas logique vu que tu appelles attachMovie à chaque fois pour ajouter un clip qui existe déjà...

Reply

Marsh Posté le 27-05-2008 à 15:10:58    

je saissis pas trop bien?
ni comment comment corriger ça,
pourrais tu m'éclairer stp?
merci

Reply

Marsh Posté le 27-05-2008 à 15:26:53    

si j'ai bien compris ce que tu veux faire : tu veux 100 confettis qui changent de position et de couleur toutes les secondes ?
 
donc :
- tu crées une seule fois tes 100 confettis
- toutes les secondes tu changes la position/couleur de ces confettis

Reply

Marsh Posté le 27-05-2008 à 15:43:58    

j'ai fait ça mais j'y arrive pas :(
soju, tu peux jetter un coup d'oeil?
merci
 
function createBall() {
 
 
 colourChoices = ["0xa93232", "0xFF3200", "0x003200", "0x0056aa"];
 for (var i:Number=0 ; i<100 ; i++)
 {
   
chooseColour = colourChoices[Math.floor(Math.random()*colourChoices.length)];
 var absci =  Math.floor(Math.random()*500); // abscisses
 var ordo =  Math.floor(Math.random()*500);// ordonnées
 var transpa =  Math.floor(Math.random()*99);// transparence en pourcentage
 
var attachedMc = this.attachMovie("circle",["myCircle"+i],this.getNextHighestDepth());
attachedMc._x = absci;
attachedMc._y = ordo;
attachedMc._alpha = transpa;
var my_color:Color = new Color(["myCircle"+i]);
my_color.setRGB(chooseColour);
 
 
 
}}
function createBall2() {
 colourChoices = ["0xa93232", "0xFF3200", "0x003200", "0x0056aa"];
 chooseColour = colourChoices[Math.floor(Math.random()*colourChoices.length)];
 var absci =  Math.floor(Math.random()*500); // abscisses
 var ordo =  Math.floor(Math.random()*500);// ordonnées
 var transpa =  Math.floor(Math.random()*99);// transparence en pourcentage
 
attachedMc._x = absci;
attachedMc._y = ordo;
attachedMc._alpha = transpa;
var my_color:Color = new Color(["myCircle"+i]);
my_color.setRGB(chooseColour);
 
 
}
 
 
 
createBall();
createBall2();
setInterval (createBall2, 1000);

Reply

Marsh Posté le 27-05-2008 à 16:53:19    

tiens je viens de voir un truc, dans ton premier code :

Code :
  1. var attachedMc = this.attachMovie("circle",["myCircle"+i],_root.getNextHighestDepth(),{_x:absci, _y:ordo,_alpha:transpa});

ça fonctionne la première fois mais pas après, car:
- première execution : this=_root
- ensuite avec setInterval : this=undefined
bon ça ne résout pas le problème mais c'est intéressant à savoir
et au passage :
- ton utilisation de attachMovie n'est pas super propre, c'est "myCircle"+i au lieu de ["myCircle"+i]
- pas très logique d'utiliser _root.getNextHighestDepth() avec this.attachMovie
 
pour en revenir à ton dernier code :
- dans createBall pas besoin de régler position et couleur vu que tu le fais dans createBall2
- y'a pas de boucle dans createBall2 et attachedMc n'est pas défini

Reply

Marsh Posté le 27-05-2008 à 17:03:25    

y'a pas de boucle dans createBall2 et attachedMc n'est pas défini
--> je ne sais pas comment faire pour (re)definir attacheMc,
pourquoi faut il refaire une boucle?

Reply

Marsh Posté le 27-05-2008 à 17:09:30    

jerrry a écrit :

pourquoi faut il refaire une boucle?

ben je vois pas comment tu veux modifier tes 100 confettis sans faire une boucle

Reply

Marsh Posté le 27-05-2008 à 17:09:30   

Reply

Marsh Posté le 27-05-2008 à 17:27:30    

et pour redefinir attacheMc?

Reply

Marsh Posté le 28-05-2008 à 15:06:28    

dans ta boucle tu dis que attachedMc correspond à myCircle+numero, soit avec la syntaxe à crochet, soit avec eval
et n'attends pas que je te ponde le code, ça ne t'aiderai pas

Reply

Marsh Posté le 28-05-2008 à 15:41:05    

je n'attends pas de toi que tu me ponde le code mais si tu peux être plus clair parfois ça fait des heures que je m' acharne sur ces quelques lignes et je me tire les cheveux je te donnes la dernière version modifiée
qui me permet d'obtenir un malheureux confettis(!) ou sont passés ces 99 potes mystère...
 
function createBall() {
 
 
 colourChoices = ["0xa93232", "0xFF3200", "0x003200", "0x0056aa"];
 for (var i:Number=0 ; i<100 ; i++)
 {
   
chooseColour = colourChoices[Math.floor(Math.random()*colourChoices.length)];
 var absci =  Math.floor(Math.random()*500); // abscisses
 var ordo =  Math.floor(Math.random()*500);// ordonnées
 var transpa =  Math.floor(Math.random()*99);// transparence en pourcentage
 
var attachedMc = _root.attachMovie("circle","myCircle"+i,this.getNextHighestDepth());
 
 
 
 
}}
function createBall2() {
 colourChoices = ["0xa93232", "0xFF3200", "0x003200", "0x0056aa"];
 chooseColour = colourChoices[Math.floor(Math.random()*colourChoices.length)];
 var absci =  Math.floor(Math.random()*500); // abscisses
 var ordo =  Math.floor(Math.random()*500);// ordonnées
 var transpa =  Math.floor(Math.random()*99);// transparence en pourcentage
for (var i:Number=0 ; i<100 ; i++)
 {
attachedMc=_root["myCircle"+i];  
attachedMc._x = absci;
attachedMc._y = ordo;
attachedMc._alpha = transpa;
var my_color:Color = new Color(["myCircle"+i]);
my_color.setRGB(chooseColour);
}
 
}
 
 
 
createBall();
createBall2();
setInterval (createBall2, 1000);
 
 

Reply

Marsh Posté le 28-05-2008 à 16:03:18    

vu que tu définis absci et ordo en dehors de ta boucle, tous tes confettis ont la même position donc tu n'en vois qu'un

Reply

Marsh Posté le 28-05-2008 à 16:39:59    

bien vu,
ça marche!
merci
crois tu que ça vaut la peine que je le dépose sur flashkod comme tuto?

Reply

Marsh Posté le 28-05-2008 à 16:49:15    

heu non, ne le prend pas mal mais c'est pas super propre comme code

Reply

Marsh Posté le 28-05-2008 à 16:57:13    

;-(
 
 
mince alors, et moi qui me prenait pour un nouveau génie...

Reply

Marsh Posté le 29-05-2008 à 14:16:53    

salut tu sais ça m'interesserait de savoir pourquoi le code n'est pas propre voila le code corrigé tel qu'il m'a été fourni sur un autre forum
est ce qu'il est propre, lui?
 
merci
 
 function createBall() {  
     colourChoices = ["0xa93232", "0xFF3200", "0x003200", "0x0056aa"];  
     for (var i:Number = 0; i<100; i++) {  
         var attachedMc = _root.attachMovie("circle", "myCircle"+i, this.getNextHighestDepth());  
     }  
 }  
 function createBall2() {  
     colourChoices = ["0xa93232", "0xFF3200", "0x003200", "0x0056aa"];  
   
     for (var i:Number = 0; i<100; i++) {  
         attachedMc = _root["myCircle"+i];  
         chooseColour = colourChoices[Math.floor(Math.random()*colourChoices.length)];  
   
         attachedMc._x = Math.random()*Stage.width  
         attachedMc._y = Math.random()*Stage.height  
         new Color(attachedMc).setRGB(chooseColour)  
         attachedMc._alpha = Math.random()*100
   
   
     }  
 }  
 createBall();  
 createBall2();  
 setInterval(createBall2, 1000);

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed