begin process at 2012 05 27 09:27:28
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Flash / Flash MX

 > 

Scripts

 > 

ActionScript

 > 

Probleme pour gérer attachMovieClip()


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Probleme pour gérer attachMovieClip()

lundi 28 décembre 2009 à 19:23:30 | Probleme pour gérer attachMovieClip()

Siron123

Bonjour à tous,

J'ai un soucis avec la fonction attachMovieClip(), je veux en fait défaire en sorte que mon vaisseau puisse tirer des lasers, donc je fais :

Code ActionScript :
fond.onRelease = function(){ /* au clique de la souris */
reference = attachMovie("laser", "laser"+i, _root.getNextHighestDepth() ); /* on duplique le clip laser de la bibliothèque */
		reference._x = vaisseau._x;
		reference._y = vaisseau._y - 27;
		i++; 
		reference.onEnterFrame = function(){ 
			this._y -= 5;
			if(this._y < -5){ /* on supprime "laser" s'il sort de la scène */
				this.removeMovieClip();
			}
		}
}

Mais lorsque je veux faire en sorte que ces laser disparaissent et fassent disparaitre la cible une fois qu'ils l'ont touchée (avec hitTest), rien ne se passe... Je me suis rendu compte qu'une fois qu'il y avait plusieurs laser sur la même scène, le hitTest devenait inutile..
Code ActionScript :
	
if(hap.hitTest(reference)){
	trace("touché");
}

Comment puis je faire donc?

Merci
mardi 29 décembre 2009 à 12:00:01 | Re : Probleme pour gérer attachMovieClip()

dj_ouf


Bonjour

Déjà il faudrait effacer l'écouteur onEnterFrame lorsque tu efface un laser (delete this.onEnterFrame).

Quelle est cette variable reference ? Si c'est une variable globale, alors l'ancien est sans cesse écraser par le nouveau, ce qui fait qu'un seul laser fera les tests.
Et peut on voir le code avec le hitTest stp ? Parce que là on ne sait pas à quoi fait référence "hap", donc c'est difficile de te dépanner..


mardi 29 décembre 2009 à 20:16:12 | Re : Probleme pour gérer attachMovieClip()

Siron123

Merci pour ta réponse dj_ouf, voila le code entier (non complet d'ailleurs ^^" )

Code ActionScript :
function randRange(min:Number, max:Number):Number { /* Fonction hasard */
    var randomNum:Number = Math.floor(Math.random() * (max - min + 1)) + min;
    return randomNum;
}

var vitesse:Number = new Number(5); /* on définit les variables */
var i:Number = new Number(0); 
var p:Number = new Number(0);

fond.swapDepths(-16383);/* profondeur minimal à fond, pour ne pas chevaucher d'autre clip */

_root.onEnterFrame = function(){ 

	if(Key.isDown(Key.LEFT)){ /* on donne les mouvements au vaisseaux  */
		vaisseau._x -= 5; }
	if(Key.isDown(Key.RIGHT)){
		vaisseau._x += 5; }
		
		hap._x += vitesse;
		
		/* on controle le vaisseau, le but est de toucher l'ennemi
		hap qui s'approche de plus en plus */
		
		
	if(hap._x - hap._width/2 <= 45){ /* si cible hap touche les limites, changement de sens */
		vitesse = -vitesse ; /* variable que l'on rend négative pour changer le sens */
		hap._y += 35;
	}
	if(hap._x + hap._width/2 >= Stage.width - 45){
		vitesse = -vitesse ;
		hap._y += 35;
	}
	
	fond.onRelease = function(){ /* au clique de la souris */
		
		/* au clique de la souris, un laser est tiré */
		
		reference = attachMovie("laser", "laser"+i, _root.getNextHighestDepth() ); /* on duplique le clip laser de la bibliothèque */
		reference._x = vaisseau._x;
		reference._y = vaisseau._y - 27;
		i++; 
		reference.onEnterFrame = function(){ 
			this._y -= 5;
			if(this._y < -5){ /* on supprime "laser" s'il sort de la scène */
				this.removeMovieClip();
			}
		}
	}
	if(hap.hitTest(reference)){ // si le laser touche l'ennemi
		trace("touché");
	}
	if(randRange(0,30) == 29){ // définit quand hap doit tirer un projectile
 		reference2 = attachMovie("balle","balle"+p,_root.getNextHighestDepth() ); /* on duplique balle */
		reference2._x = hap._x;
		reference2._y = hap._y;
		p++;
		reference2.onEnterFrame = function(){
			this._y += 5;
			if(this.y > Stage.height +5){
				this.removeMovieClip();
			}
		}
	}
	
}


Je suis encore débutant.. donc tout les conseils me seront utiles :')
mercredi 30 décembre 2009 à 09:53:47 | Re : Probleme pour gérer attachMovieClip()

dj_ouf

Réponse acceptée !
Ah ben on y voit plus clair !
hap représente donc le seul ennemi à l'écran, qui descend vers le joueur.

Je vois quelques problèmes..

Déjà il faut sortir ton fond.onRelease = function(){ de la boucle onEnterFrame, car elle est redéfinis à chaque rafraichissement et ça ne sert à rien. Tu peux la définir avant le onEnterFrame.

Ensuite pour ton if(hap.hitTest(reference)), c'est normal que ça ne fonctionne pas car reference, tu le déclare en tant que variable locale dans fond.onRelease. Donc elle n'existe plus en dehors de cette fonction. Tu n'as qu'à tester un trace(reference), tu verras que ça sera à nul normalemement. Donc ce qu'il faut c'est faire le hitTest dans sa boucle onEnterFrame, tout simplement car on peut faire un test de collision entre 2 objets, et on connait le clip vaisseau qui est unique, alors que le vaisseau ne connait pas les clips lasers.

Code ActionScript :
reference.onEnterFrame = function(){ 
			this._y -= 5;
			if(this._y < -5){ /* on supprime "laser" s'il sort de la scène */
			if(hap.hitTest(this)){ // si le laser touche l'ennemi
		trace("touché");
	}
	this.removeMovieClip();
			}
		}


Et encore un truc : fond.onRelease c'est pas top pour déclencher le tir. Il suffit que ton curseur soit au dessus d'un clip par dessus le fond pour que ça ne fonctionne plus. Un _root.onMouseDown serait + approprié par exemple.

Voilà, j'espère que t'y voit plus clair
mercredi 30 décembre 2009 à 10:35:28 | Re : Probleme pour gérer attachMovieClip()

Siron123

Ah oui, exactement , ca marche impec maintenant ^^

Mais y aurait il une autre solution? Définir référence par exemple, en tant qu'Object ou autre.. j'anticipe sur mes futurs erreurs.

Merci beaucoup en tout cas
mercredi 30 décembre 2009 à 11:04:24 | Re : Probleme pour gérer attachMovieClip()

dj_ouf

Bah honnêtement je ne vois pas de solutions plus propre que celle ci...

Tu peux faire aussi dans le sens inverse, c'est à dire stocker dans un tableau toutes les variables de tir 'reference', puis boucler ce tableau dans le onEnterFrame pour tester individuellement si chaque tir touche le vaisseau. Mais après il faut effacer chaques référence du tableau quand il sort de l'écran ou touche le vaisseau, donc tu vois c'est bien plus compliqué..

Bref, je pense que cette technique est très bien
mercredi 30 décembre 2009 à 11:17:24 | Re : Probleme pour gérer attachMovieClip()

Siron123

Oui ^.^" on va garder celle ci,

Merci beaucoup pour ton aide!


Cette discussion est classée dans : code, reference, vaisseau, laser, attachmovieclip


Répondre à ce message

Sujets en rapport avec ce message

Urgent s'il vous plait... impossible de trouver le chemin d'acces d'un clip placé sur la scène ! [ par Siteauludo ] Bonjour, voilà, je m'explique : je suis en train d'essayer de faire un mini-jeu, type plateforme. Bon j'ai 2 calques, un pour les actions, l'autre pou Problème de laser dans un jeu [ par nicomilville ] Salut,Voila je suis débutant en flash et je suis en train de créer un jeu, dans ce jeu j'ai 5 laser pour le vaisseau du joueur et 5 autre pour le vais laser d'un jeu de vaisseau [ par snakeeater1 ] bonjour je cherche un code AS pour créer un "laser" pour un jeu de vaisseau mais attention je voudrai que se laser soit continu et démarre lorsque le attachmovieclip [ par naibaf71 ] Ce code est super sympas pour moi qui suis débutant!j'essaye d'utiliser une partie de se code pour me faire les dents en action script mais celà ne ma vitesse de tir [ par ftsdesign ] bonsoir à tous.voici une nouvelle question qui curieusement n'a jamais été posée ( du moins pas à ma connaissance) :je fais un petit shut'em up en lig vitesse de tir (2) [ par ftsdesign ] bon, faut pas croire, je pose des questions mais je cherche !Et j'ai trouvé ce code (http://www.flashkod.com/code.aspx?ID=14200) :if (Key.isDown(Key.S pb avec duplicateMovieClip [ par ftsdesign ] voilà, toujours pour mon jeu, j'utilise un duplicateMovieClip pour créer les enemis. seulement, au bout d'un moment je ne me retrouve plus qu'avec un Afficher un graphique après un clic sur un bouton [ par hanslepire ] Hello,J'aimerais avoir une précision d'aaaah bruti !J'ai un bouton. Quand je clic dessus, j'aimerais qu'il m'affiche un graphique.on(release){ _root Flash 6 et 7 [ par GrimleFurieux ] j'ai un probleme de codeonClipEvent (keyDown) { if (Key.getCode() == Key.RIGHT) { right = 1; }}ce code fonctionne sous flash 6 mais pas 7 , savez vous


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,061 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales