Creation et suppression dynamique de clip [AS2]

mamelon04 Messages postés 11 Date d'inscription mardi 4 mai 2010 Statut Membre Dernière intervention 12 mai 2010 - 4 mai 2010 à 17:47
BBFUNK01 Messages postés 1310 Date d'inscription jeudi 16 juillet 2009 Statut Membre Dernière intervention 20 juin 2014 - 11 mai 2010 à 17:40
Bonjour,

Après avoir longuement recherché sur le net et ne trouvant pas de solution ni même d'indication pouvant résoudre mon problème, je viens vous demander de l'aide.

problème : Je crée de façon dynamique (attacheMovie) un certain nombre de clip. Le problème se trouve lors de la suppression de ces clips.

le programme que j'écris consiste en une sorte de space invader avec un mouton et des loups...
Dans ma bibliothèque j'ai un clip nommé "ennemis".


pour créer les ennemis :
function creaEnnemis(){
var i;

//on crée le nombre d'ennemis voulu :
for(i=1;i<=nbEnnemis;i++)
{

this._root.attachMovie("ennemis","loup"+i,_root.getNextHighestDepth());
        
   
       //on l'affiche aux coordonnées suivantes :
_root["loup"+i]._x=Math.round(Math.random()*((xmax-30)-(xmin+30))+(xmin+30));
_root["loup"+i]._y=0;

}


}




Lors de la collision entre le mouton et un des loups, je veux bien entendu supprimer ce loup :
function collision(){

// en cas de collision avec un loup on supprime le loup :
for(i=1;i<nbEnnemis+1; i++)
{

var loup =_root["loup"+i];
if(mouton.hitTest(loup))
{
trace("suppression du loup "+loup);
loup.removeMovieClip();
 	nbEnnemis --;
                }
       }


Voilà pour le code....
j'espère que vous pourrez m'aider....

14 réponses

BBFUNK01 Messages postés 1310 Date d'inscription jeudi 16 juillet 2009 Statut Membre Dernière intervention 20 juin 2014 6
4 mai 2010 à 18:37
Hello,

essaie ceci :

function collision(){

// en cas de collision avec un loup on supprime le loup :
for(i=1;i<nbEnnemis+1; i++)
{

var loup =_root["loup"+i];
if(mouton.hitTest(loup))
{
trace("suppression du loup "+loup);
removeMovieClip("loup"+i);//ou peut-être aussi "removeMovieClip(loup);
 	nbEnnemis --;
                }
       }



BBFUNK01
//C'est en forgeant qu'on devient forgeron... ;-) ;
0
mamelon04 Messages postés 11 Date d'inscription mardi 4 mai 2010 Statut Membre Dernière intervention 12 mai 2010
4 mai 2010 à 20:32
Merci d'avoir répondu rapidement,
J'ai suivi ton conseil et ça ne fonctionne toujours pas....

le truc c'est que le nombre d'ennemis crée dépend du niveau où le joueur est rendu nbEnnemis = niveau * niveau.
les loup se deplace verticalement vers le bas.

je crée donc nbEnnemis loup.
au niveau 1 lorsque mon mouton touche le loup pas de problème il est bien supprimé.
au niveau 2, il y a alors 4 loups, lorsque je rentre en collision avec un loup il y en a un qui s'arrête....

je suis débutant et là je bloque vraiment...
0
BBFUNK01 Messages postés 1310 Date d'inscription jeudi 16 juillet 2009 Statut Membre Dernière intervention 20 juin 2014 6
4 mai 2010 à 20:55
hum... je pense que le problème vient du fait qu'il faut que tu réinitalises les "positions" des éléments contenus dans ton array qui gère les loups, c'est probablement à cause de ça que les loups qui doivent être supprimés, ne le sont pas à un certain niveau du jeu.
Que donne ton trace() dans ta fonction "suppression du loup" ? C'est par là qu'il faut creuser.

BBFUNK01
//C'est en forgeant qu'on devient forgeron... ;-) ;
0
mamelon04 Messages postés 11 Date d'inscription mardi 4 mai 2010 Statut Membre Dernière intervention 12 mai 2010
4 mai 2010 à 21:14
Je n'utilise pas d'array.... (est-ce obligatoire ?)
Je viens d'avoir une idée après je sais pas si c'est vraiment ça dis mois ce que tu en pense :
lorsque je supprime un clip avec removeMovieClip, ce clip a une certaine profondeur admettons que j'en supprime un dont la profondeur est 2 est ce possible que ça affecte celui qui se trouve à la profondeur 3....
Peut être est-ce juste un problème de profondeur...

sinon le trace me renvoi "suppression du loup _level0.loup" avec après loup le numeros du loup.
0

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

Posez votre question
BBFUNK01 Messages postés 1310 Date d'inscription jeudi 16 juillet 2009 Statut Membre Dernière intervention 20 juin 2014 6
4 mai 2010 à 22:21
Non ce n'est pas un problème de profondeur à priori, par contre en regardant ton code je remarque que tu commences ainsi :
var i;
, mais tu ne définis pas "i" réellement, tes clips sont créés dynamiquement et dans ta boucle cela incrémente les valeurs de "i", par conséquent j'imagine qu'au fur et à mesure des clips supprimés ou ajoutés, on se retrouve avec des valeurs "i" présentes sur la scène sans ordre logique, j'entends par là que tu pourras te retrouver à un moment avec ces valeurs là pour "i" : 1,3,4,7,11... je ne sais pas si mon explication est très claire , ce que je veux dire c'est que si tu stockes tes clips dans un array() lorsqu'ils sont attachés ou supprimés, tu auras peut-être plus de facilité à gérer ces clips, du fait qu'avec le code adéquat tu auras une suite croissante et ordonnée au niveau des valeurs de "i".

Par exemple :
function creaEnnemis(){
var i:Number = 0;
var TableauEnnemis:Array = new Array();

//on crée le nombre d'ennemis voulu :
for(i=0;i<=TableauEnnemis;i++)
{

this._root.attachMovie("ennemis","loup"+i,_root.getNextHighestDepth());
TableauEnnemis.push(i);
        
   
       //on l'affiche aux coordonnées suivantes :
_root["loup"+i]._x=Math.round(Math.random()*((xmax-30)-(xmin+30))+(xmin+30));
_root["loup"+i]._y=0;

}
}

function collision(){

// en cas de collision avec un loup on supprime le loup :
if(mouton.hitTest("loup"+i))
{
trace("suppression du loup "+("loup"+i));
removeMovieClip("loup"+i);
 	TableauEnnemis.splice(i, 1);
                }
       }



BBFUNK01
//C'est en forgeant qu'on devient forgeron... ;-) ;
0
mamelon04 Messages postés 11 Date d'inscription mardi 4 mai 2010 Statut Membre Dernière intervention 12 mai 2010
5 mai 2010 à 10:57
Bonjour, merci pour ton explication pour ma variable de boucle "i".
Effectivement je pense avoir compris ce que tu m'a dit je vais donc opter pour la solution d'un array.
Cependant j'ai essayé ton code d'exemple pour commencer. Il semble que flash player n'apprécie pas du tout la boucle pour ainsi modifié dans la fonction creaEnnemis().... lorsque j'exécute l'animation (ou plutôt quand j'essai de l'exécuter), j'ai un message qui me dit en gros qu'un script présent dans l'animation ralenti flash player et que si je continu son exécution il se pourrait que mon ordi plante... J'ai quand même essayé et pour une fois le message d'erreur avait raison mon ordi a planté pendant 5 minutes... et au final l'animation ne s'est même pas lancé...

Si tu vois à quoi cela est dû...

En tout cas merci pour ta patience envers le débutant que je suis.
0
BBFUNK01 Messages postés 1310 Date d'inscription jeudi 16 juillet 2009 Statut Membre Dernière intervention 20 juin 2014 6
5 mai 2010 à 11:33
Hello,

mets ton code complet dans le post s.t.p. afin qu'on voit le tout de A à Z. Si tu souhaites m'envoyer ton fla pour que je regarde, fais-moi signe.

A plus,

BBFUNK01
//C'est en forgeant qu'on devient forgeron... ;-) ;
0
mamelon04 Messages postés 11 Date d'inscription mardi 4 mai 2010 Statut Membre Dernière intervention 12 mai 2010
5 mai 2010 à 11:47
je crois que je vais t'envoyer le .fla ça sera beaucoup plus simple.Enfin je pense...
Seulement je suis nouveau sur ce forum comment je dois procéder pour te l'envoyer ?
0
BBFUNK01 Messages postés 1310 Date d'inscription jeudi 16 juillet 2009 Statut Membre Dernière intervention 20 juin 2014 6
5 mai 2010 à 13:11
Re,

je t'envoie mon adresse e-mail en pv, envoie moi le fichier à cette adresse. Je regarderai ce soir car je n'ai pas Flash sous la main.

A plus,

BBFUNK01
//C'est en forgeant qu'on devient forgeron... ;-) ;
0
mamelon04 Messages postés 11 Date d'inscription mardi 4 mai 2010 Statut Membre Dernière intervention 12 mai 2010
7 mai 2010 à 11:38
salut,

as-tu eu le temps de regarder mon fla ?
0
BBFUNK01 Messages postés 1310 Date d'inscription jeudi 16 juillet 2009 Statut Membre Dernière intervention 20 juin 2014 6
7 mai 2010 à 11:47
Hello,

j'ai commencé à y jeter un oeil mais je n'ai pas encore trouvé le souci. Je me pencherai plus dessus ce week-end.
Je te tiens au courant,

A plus,

BBFUNK01
//C'est en forgeant qu'on devient forgeron... ;-) ;
0
mamelon04 Messages postés 11 Date d'inscription mardi 4 mai 2010 Statut Membre Dernière intervention 12 mai 2010
7 mai 2010 à 12:11
oki, ça marche. De toute façon comme je te le disais rien ne presse puisque je suis en pleine révision pour mes études....
0
mamelon04 Messages postés 11 Date d'inscription mardi 4 mai 2010 Statut Membre Dernière intervention 12 mai 2010
11 mai 2010 à 16:35
salut,
as tu trouvé l'erreur ? je profite de la petite semaine de trou dans mes exams pour me remettre à travailler dessus.
0
BBFUNK01 Messages postés 1310 Date d'inscription jeudi 16 juillet 2009 Statut Membre Dernière intervention 20 juin 2014 6
11 mai 2010 à 17:40
Hello,

non je n'ai pas encore trouvé le souci (j'ai pas pu passer beaucoup de temps dessus...), dès que j'ai du nouveau je te tiens informé.

A plus,

BBFUNK01
//C'est en forgeant qu'on devient forgeron... ;-) ;
0
Rejoignez-nous