erreur de syntaxe? [actionscript] - Flash/ActionScript - Programmation
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...
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);
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à...
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
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
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);
Marsh Posté le 27-05-2008 à 16:53:19
tiens je viens de voir un truc, dans ton premier code :
Code :
|
ç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
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?
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
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
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);
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
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?
Marsh Posté le 28-05-2008 à 16:49:15
heu non, ne le prend pas mal mais c'est pas super propre comme code
Marsh Posté le 28-05-2008 à 16:57:13
;-(
mince alors, et moi qui me prenait pour un nouveau génie...
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);
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);