Probleme avec le hitTest

Résolu
Signaler
Messages postés
26
Date d'inscription
vendredi 7 octobre 2005
Statut
Membre
Dernière intervention
18 juin 2011
-
Messages postés
26
Date d'inscription
vendredi 7 octobre 2005
Statut
Membre
Dernière intervention
18 juin 2011
-
Voila je suis entrain de réaliser un jeu du style "shoot em up",
plusieurs clip qui ce balade alléatoirement que j'ai nommés (cible0,cible1,cible2,....ciblen),et des balles (balle0,balle1,balle2,....ballen),le je consiste a tiré sur ces cibles avec ces balles, mais voila je ne trouve pas l'astuce pour réaliser des "hitTest" sur plusieurs clip.
pour me comprendre voila un exemple :

//--les balles-------------------------------------------------------------
function balle() {
var i = getNextHighestDepth();
var balle = _root.createEmptyMovieClip("balle"+i, i);
balle.lineStyle(4, 0xC44211, 100);
balle.moveTo(0, 5);
balle.lineTo(5, 0);
balle.moveTo(5, 0);
balle.lineTo(0, 5);
balle._x = _xmouse;
balle._y = _ymouse;
balle.onEnterFrame = deplace1;
}
//-------les cibles-------------------------------------------------------
function cible() {
var j = getNextHighestDepth();
var cible = _root.createEmptyMovieClip("cible"+j, j);
cible.lineStyle(18, 0x0F11CD, 100);
cible.moveTo(0, 0);
cible.lineTo(0, 8);
cible.moveTo(0, 8);
cible.lineTo(8, 0);
cible._x = 100;
cible.onEnterFrame = deplace2;
}
//-----deplacement 1 (balles)----------------------------------------------
function deplace1() {
this._y -= 20;
if (this._y<-30) {
    this.removeMovieClip();
}
}
//-----deplacement 2 (cibles)----------------------------------------------
function deplace2() {
this._y += 12;
if (this._y>450) {
this.removeMovieClip();
}
}

Merci .................

7 réponses

Messages postés
103
Date d'inscription
vendredi 29 janvier 2010
Statut
Membre
Dernière intervention
18 mars 2012

Je te donne un lien pour crée un "shoot em up" c'est le meilleur tutoriel AS2 objet que je connaisse .
C'est tres mal expliquer dans les details mais sa fonctionne à merveille.
Si tu passe le chapitre 5 tu poura réaliser ton jeu sans soucis tres rapidement .

http://www.kongregate.com/labs
Messages postés
26
Date d'inscription
vendredi 7 octobre 2005
Statut
Membre
Dernière intervention
18 juin 2011

je vient de réussir un hitTest mais qu'avec des projectile sur une seul et unique cible "cible", a savoir que la cible et un MovieClip que j'ai met sur scène (exp : cercle), voici le code :

var tab=new Array();
//---------Projectile---------------------------------
function  projectile () {
var i=getNextHighestDepth();
var balle=_root.createEmptyMovieClip("balle"+i,i);
balle.beginFill(0xCF1545,100);
balle.moveTo(0,0);
balle.lineTo(10,0);
balle.lineTo(10,10);
balle.lineTo(0,10);
balle.lineTo(0,0);
balle.endFill();
balle.onEnterFrame=deplaceproj;
tab.push(balle);
}
//----Deplacemement----------------------------------
function  deplaceproj () {
this._y+=20;
if (this._y>400){
this.removeMovieClip();
}
for (test in tab){
if (_root["balle"+test].hitTest(cible)){
trace("touché");
_root["balle"+test].removeMovieClip();
}
}
}
//--------declanchement des évènements------------------------
onMouseDown=function  () {
projectile();
}


j'avance tout doucement........ merci pour ton aide Carton99

                      
Messages postés
103
Date d'inscription
vendredi 29 janvier 2010
Statut
Membre
Dernière intervention
18 mars 2012

tres simple je te donne un exmeple d'utilisation sur de mes programme
for(var i in _root.vaisseau1.tabtir)
{
if(this.hitTest( _root.vaisseau1.tabtir[i] ) )
{
}
}

tu n'a plus qu'a crée le tableau tabtir qui permetera de te reperer sur t'es objets
tu le déclate de cette facon
tabtir = [];
et tu l'utilise, comme sa:

var tir_un = _root.attachMovie( "tir_un" , "tir_un" + _root.getNextHighestDepth(), _root.getNextHighestDepth() );
tabtir.push(tir_un);
Messages postés
26
Date d'inscription
vendredi 7 octobre 2005
Statut
Membre
Dernière intervention
18 juin 2011

merci mais j'ai pas bien saisi le truc

                      
Messages postés
26
Date d'inscription
vendredi 7 octobre 2005
Statut
Membre
Dernière intervention
18 juin 2011

peu-tu m'éclaircir sur ce point ? merci de ton attention


                      
Messages postés
103
Date d'inscription
vendredi 29 janvier 2010
Statut
Membre
Dernière intervention
18 mars 2012

oui dsl je vai esseyer d'etre plus clair .

la fonction hittest fonctionne de cette facon
if(this.hitTest( un_movie_clip ) )

tous le probleme et de bien définir le "un_movie_clip" je vai de donner un exmple simple .

Dans ta scenne tu nome directement un movieclip mon_movieclip et bien pour savoir si ce mv est en collision avec celui que tu veu tester tu fait :
tu te place dans un MV
if(this.hitTest( _root.mon_movie_clip ) ) si le test réussi tu est dans le if .

Mais ton probleme est plus compliqué car tu veu faire le test entre les boules et les cible .Tu a deux facon
La premeire hyper déconseillé tu cré 10 boules sur ta scène est tu les nomes les dix et tu fait 10 hit test pour chaque cible crée .
A toi de gérer inteligement les boules cad à les placer très loins si tu veu pas les voir .

La deuxieme facon "la mieu" est de crée une liste chainé ou plutot dans flash un tableau et d'enregistrer les movies clip dans le tableau afin d'accéder au MC de cette facon _root.mon_movieclip.tableau[positiondansletableau]
exmeple d'utilisation
if(this.hitTest( _root.mon_movieclip.tableau[positiondansletableau] ) )


Pour moi tu t'attaque à une partie tres dur ,acharne toi dessus parcque sinon impossible de faire un "shoot em up" et sa vaut le coup.
Messages postés
26
Date d'inscription
vendredi 7 octobre 2005
Statut
Membre
Dernière intervention
18 juin 2011

Merci Merci Merci carton99 tu me sauve la vie