Forums Développement Multimédia

Aller au contenu

Attach movie et hitTest

CODE Actionscript

7 réponses à ce sujet

#1 z3c33

    Ceinture Jaune

  • Members
  • PipPip
  • 19 messages

Posté 29 October 2008 - 19:59 PM

Bonjour tout le monde!
Alors j'ai un problème... J'ai mis pas mal de temps à voir d'où il venait, je sais maintenant la source du problème, mais le résoudre, je n'y suis pas encore...
Je poste mon code :

Action Script

for(i=0; i<=gauche; i++){
this["siberiend"+i].onEnterFrame = function(){
//Création des balles
if(tir[i] == 0){
lance = randRange(1,20);
if (lance == 1){
tir[i] = 1
this.attachMovie("balleds", "ballesib1"+i, this.getNextHighestDepth(), { _x:0, _y:-18 })
my_sound_lazer.start(0,1)
}
}
if(tir[i] == 1){
if(this["ballesib1"+i].hitTest(_root.soldat)){
if(_root.soldat.immunite == 0){
_root.vie--
_root.rouge.gotoAndPlay(2);
}
}
//Déplacement des balles
this["ballesib1"+i]._x = this["ballesib1"+i]._x + 10 ;
//Suppression des balles
if(this["ballesib1"+i]._x > 1000){
this["ballesib1"+i].removeMovieClip()
tir[i] = 0
}
}
}
}

Bon ça a l'air un peu barbare j'imagine au premier abord mais le problème est simple.
Lorsque je teste la collision entre ["ballesib1"+i] et [_root.soldat] (je remplacerai par un chemin relatif plus tard ^^), il interprète le clip ["ballesib1"+i] comme un grand clip regroupant ["ballesib1"+i] et... ["siberiend"+i] (à l'origine du onEnterFrame).
Ce que je voudrais, c'est une collision entre seulement ["ballesib1"+i] et [_root.soldat]...
J'espère que c'est assez compréhensible...
Je vous remercie de votre aide potentielle smile.gif
++






#2 trebalig

    Ceinture Noire

  • Members
  • PipPipPipPipPipPipPip
  • 237 messages

Posté 29 October 2008 - 22:00 PM

Salut
il me semble que ton problème vient de "i".
essaye de faire plutôt un truc du genre :

Action Script

for(i=0; i<=gauche; i++){
this["siberiend"+i].num=i;
this["siberiend"+i].onEnterFrame = function(){
//Création des balles
if(tir[this.num] == 0){
lance = randRange(1,20);
if (lance == 1){
tir[this.num] = 1
this.attachMovie("balleds", "ballesib1"+this.num, this.getNextHighestDepth
...
ou alors utilise une fonction car il me semble que le problème ne se poserais pas avec le paramètre d'une fonction.
En fait dans ton script "i" vaut toujours "gauche".

#3 z3c33

    Ceinture Jaune

  • Members
  • PipPip
  • 19 messages

Posté 29 October 2008 - 22:19 PM

Salut!
Je te remercie de ta réponse!
Effectivement, il y avait un problème avec i que je n'avais pas encore résolu non plus... Et je te remercie, de ce côté là, ça marche très bien maintenant.
Pourtant, le problème de collision persiste... Ca fait depuis hier que je cherche en vain...Pas moyen de remedier à ça
Je reposte le code nouvellement créé :

Action Script

for(i=0; i<=gauche; i++){ 
this["siberiend"+i].num = i;
this["siberiend"+i].onEnterFrame = function(){
//Création des balles
if(tir[this.num] == 0){
lance = randRange(1,100);
if (lance == 1){
tir[this.num] = 1
this.attachMovie("balleds", "ballesib1"+this.num, this.getNextHighestDepth(), { _x:0, _y:-18 })
my_sound_lazer.start(0,1)
}
}
if(tir[this.num] == 1){
if(this["ballesib1"+this.num].hitTest(_root.soldat)){
if(_root.soldat.immunite == 0){
_root.vie--
_root.rouge.gotoAndPlay(2);
}
}
//Déplacement des balles
this["ballesib1"+this.num]._x = this["ballesib1"+this.num]._x + 10 ;
//Suppression des balles
if(this["ballesib1"+this.num]._x > 1000){
this["ballesib1"+this.num].removeMovieClip()
tir[this.num] = 0
}
}
}


#4 trebalig

    Ceinture Noire

  • Members
  • PipPipPipPipPipPipPip
  • 237 messages

Posté 30 October 2008 - 02:00 AM

Resalut
moi à part ça je ne vois rien d'autre et quand je test le hittest dans un contexte similaire ça fonctionne ... et tu sûr que tout le contenu de tes clip est visible ?
Tu devrais tracé la taille de tes clips pour voir
Bon courage

#5 z3c33

    Ceinture Jaune

  • Members
  • PipPip
  • 19 messages

Posté 30 October 2008 - 08:59 AM

Re-
Je suis sûr que tous mes clips sont visibles. Je n'utilise nul part de code permettant d'afficher / masquer un clip. Et je suis pratiquement sûr que l'erreur provienne du hitTest qui marche sur les deux clips. Enfin en tout cas, je vois pas d'autres possibilités.
Je me demande si ca vient pas de ça :

Action Script

 this["siberiend"+i].onEnterFrame = function(){   

et :

Action Script

 this.attachMovie("balleds", "ballesib1"+this.num, this.getNextHighestDepth(), { _x:0, _y:-18 }) 

Le attachMovie n'inclurait pas le clip "balleds" dans le clip "siberiend" ou un truc du genre ? J'ai essayé de modifier le code par 36000 façons, rien n'y fait...
Y'aurait possibilité si t'as un peu de temps que tu jettes un oeil sur le fla si je te l'envoie ?
++


#6 paodao

  • Moderateur
  • PipPipPipPipPipPipPipPip
  • 7081 messages

Posté 30 October 2008 - 12:06 PM

salut

tu veux creer ou les clips balles
là ils sont cree dans les lcip siberiend
sinon tu peux simplifier un peu ton code

Action Script


for(i=0; i<=gauche; i++)
{
tmp = this["siberiend"+i]
tmp.num = i;
tmp.isFire = false
tmp.onEnterFrame = function()
{
if(!this.isFire)
{
lance = randRange(1,100);
if (lance == 1)
{
this.isfire = true
balle = this.attachMovie("balleds", "balleds", this.getNextHighestDepth(), { _x:0, _y:-18 })
my_sound_lazer.start(0,1)
}
}
if(this.isFire)
{
if(balle.hitTest(_root.soldat))
{
if(_root.soldat.immunite == 0)
{
_root.vie--
_root.rouge.gotoAndPlay(2);
}
}
balle._x += 10;
if(balle._x > 1000)
{
balle.removeMovieClip()
balle = null
thiS.isFire = false
}
}
}
}


PS: evite les _root icon_wink.gif
a+

#7 z3c33

    Ceinture Jaune

  • Members
  • PipPip
  • 19 messages

Posté 30 October 2008 - 13:29 PM

Euh... c compliqué à expliquer, je vous poste un exemple du problème en pièce jointe. (Renommez le fichier *.zip en *.RAR, *.RAR ne m'étant pas autorisé)

-Quand les ennemis ne tirent pas, tout se passe bien, lorsque que le personnage tire (avec SPACE) les ennemis sont touchés et meurent.
-Quand les ennemis tirent, tout se passe mal. La collision avec la balle du héros se fait avec la balle de l'ennemi. Et l'ennemi meurent alors qu'aucune balle ne l'a touché.
C'est encore plus flagrant lorsque le personnage tourne le dos à l'ennemi, mais que l'ennemi ayant tiré, meurent alors que la balle partait dans l'autre direction...

Effectivement, pour te répondre paodao, il faudrait, je pense, que les balles (qu'elles soient de l'ennemi ou du héros) soit au même niveau que l'ennemi et le héros, et non, inclus dedans.
Et j'ai testé ton code et il n'est pas exactement identique puisqu'il ne fonctionne pas. (j'ai enlevé les fautes de frappes si tu pensais que ca pouvait venir de la...)

Merci pour le temps que vous me consacrez tous en tout cas...

Fichier(s) joint(s)

  • Fichier joint  Toto.zip   467.8 Ko   5 téléchargement(s)

Modifié par Z3c33, 30 October 2008 - 13:29 PM.


#8 z3c33

    Ceinture Jaune

  • Members
  • PipPip
  • 19 messages

Posté 31 October 2008 - 11:39 AM

Y'a vraiment personne qui peut m'aider alors ? icon_sad.gif




1 utilisateur(s) li(sen)t ce sujet

0 membre(s), 1 invité(s), 0 utilisateur(s) anonyme(s)

authorised training centre

Centre de Formation Mediabox - Adobe et Apple Authorised Training Center.

Déclaré auprès de la Direction du Travail et de la Formation Professionnelle

Mediabox : SARL au capital de 62.000€ - Numéro d'activité : 11 75 44555 75 - SIRET : 49371646800035

MEDIABOX, 23, rue de Bruxelles, 75009 PARIS

FFP