Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > Flash/Flex > Flash > AS3
AS3 Questions relatives à la programmation ActionScript 3 (Cours AS3)
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 14/12/2011, 10h43   #1
Invité de passage
 
Inscription : décembre 2011
Messages : 6
Détails du profil
Informations forums :
Inscription : décembre 2011
Messages : 6
Points : 0
Points : 0
Par défaut Problèmes de gestion de collisions en AS3

Hello,

Premièrement, je vous présente d'avance mes excuses si cette question a déjà été posée, je dois avouer que je suis un peu au bout du rouleau. Je suis en projet as3 et mon prof a décidément de nous laisser seuls après seulement 2 cours.

Mon problème est le suivant : Une boucle appelle en continue des boulets pour provoquer une chute de neige. J'ai un élément présent directement sur la scène que je peux contrôler grâce aux flèches du clavier.

J'aimerais créer une gestion de collision entre les éléments qui chutent et le personnage. J'ai pensé à faire un tableau dans le quel je mettrais chaque élément de la boucle, puis une utiliser le fonctionnement du tableau pour permettre à une fonction d'en tester chaque composant afin de voir si oui ou non il y a collision. Simplement, je n'arrive pas à mettre tout cela en code.

Si jamais l'un de vous avait le temps de m'aider rapidement, ça me sauverait vraiment la mise.
Si non, merci quand même d'avoir lu.

Eshra
Eshra est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2011, 11h45   #2
Membre du Club
 
Homme
Développeur informatique
Inscription : décembre 2009
Messages : 40
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : décembre 2009
Messages : 40
Points : 66
Points : 66
Bonjour,

Pour tester des collisions simples en AS3 il existe la méthode hitTestObject(obj: DisplayObject):Boolean.
Donc pour ton problème, tu parcours ton tableau contenant les boulets et pour chaque boulet tu testes la collision avec l'élément présent sur ta scène.
Un petit exemple non-fonctionnel mais qui montre le principe :
Code :
1
2
3
4
5
6
7
8
 
for each(var boulet:DisplayObject in monTableau) // Pour chaque boulet
{
    if(boulet.hitTestObject(monElement) == true) // S'il y a collision avec l'élément
    {
       // On traite la collision
    }
}
Pourcentage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2011, 12h55   #3
Invité de passage
 
Inscription : décembre 2011
Messages : 6
Détails du profil
Informations forums :
Inscription : décembre 2011
Messages : 6
Points : 0
Points : 0
Merci pour la réponse
Dernières questions probablement stupides, mais la boucle pour les boulets je la fait directement dans un tableau ? Et le bout de code que tu m'as montré, je dois le placer où ?
Eshra est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2011, 13h29   #4
Membre du Club
 
Homme
Développeur informatique
Inscription : décembre 2009
Messages : 40
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : décembre 2009
Messages : 40
Points : 66
Points : 66
Il faut au préalable que tu stockes tous tes boulets dans un tableau.

Le code que peut être placé dans une fonction appelée lors de l'événement ENTER_FRAME par exemple afin de tester la collision à chaque frame.
Pourcentage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2011, 13h35   #5
Invité de passage
 
Inscription : décembre 2011
Messages : 6
Détails du profil
Informations forums :
Inscription : décembre 2011
Messages : 6
Points : 0
Points : 0
Justement, j'ai saisi la logique, je ne sais simplement pas comment fonctionne le code. C'est bien tout le problème de ce projet initié trop rapidement par mon professeur.
Eshra est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2011, 13h45   #6
Membre du Club
 
Homme
Développeur informatique
Inscription : décembre 2009
Messages : 40
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : décembre 2009
Messages : 40
Points : 66
Points : 66
Peux-tu montrer le code que tu as actuellement ?
Pourcentage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2011, 14h00   #7
Invité de passage
 
Inscription : décembre 2011
Messages : 6
Détails du profil
Informations forums :
Inscription : décembre 2011
Messages : 6
Points : 0
Points : 0
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import flash.events.Event;
 
//Génération continue de boulets
for ( var i:int = 0 ; i < 30 ; i++ ) {
 
var hb:Hb = new Hb();
this.addChild(hb);
hb.y = -100;
hb.x = Math.random() * stage.stageWidth;
hb.mvtY = 1 + Math.random()*7;
hb.addEventListener(Event.ENTER_FRAME, onHbFrame);
if ( hb.x == personnage.x + 10 && hb.x == personnage.x - 10 && hb.y == personnage.y + 10 && hb.y == personnage.y - 10 ) {
		removeChild(personnage);
}
}
 
function onHbFrame(e:Event) {
	e.currentTarget.y += e.currentTarget.mvtY;
		if ( e.currentTarget.y > stage.stageHeight ) {
			e.currentTarget.y = -100;
	}
 
}
hb étant pour Hamburgers ( contexte de l'exercice ).
C'est ma partie de code qui concerne la boucle. ( l'autre élément lui est déjà sur la scène et a pour nom d'occurence " perso ". Je sais pas si ça change quelque chose qu'il soit déjà sur la scène pour gérer la collision )
Eshra est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2011, 14h53   #8
Membre du Club
 
Homme
Développeur informatique
Inscription : décembre 2009
Messages : 40
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : décembre 2009
Messages : 40
Points : 66
Points : 66
Vu ton code tu n'as pas besoin de faire une boucle pour tester la collision. Tu peux utiliser la fonction onHbFrame à la place puisqu'elle est appelée à chaque frame pour chaque hamburger.

La fonction onHbFrame devrait ressembler à peu près à ça si on rajoute le test de collisions :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
function onHbFrame(e:Event) {
	e.currentTarget.y += e.currentTarget.mvtY;
		if ( e.currentTarget.y > stage.stageHeight ) {
			e.currentTarget.y = -100;
	}
        // Test de la collision
        var perso:DisplayObject = container.getChildByName("perso"); 
        if(e.currentTarget.hitTestObject(perso))
        {
            // Collision !
        }
}
Pourcentage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2011, 15h02   #9
Invité de passage
 
Inscription : décembre 2011
Messages : 6
Détails du profil
Informations forums :
Inscription : décembre 2011
Messages : 6
Points : 0
Points : 0
" Accès à la propriété non définie : container "... Je n'ai jamais rien mis dans un container, ça vient de ça ?
Eshra est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2011, 15h37   #10
Membre du Club
 
Homme
Développeur informatique
Inscription : décembre 2009
Messages : 40
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : décembre 2009
Messages : 40
Points : 66
Points : 66
Euh... là je ne peux pas deviner. Cette erreur n'a pas grand-chose à voir avec le code que tu as montré. Flash t'indique la ligne de l'erreur normalement.
Pourcentage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2011, 16h01   #11
Invité de passage
 
Inscription : décembre 2011
Messages : 6
Détails du profil
Informations forums :
Inscription : décembre 2011
Messages : 6
Points : 0
Points : 0
C'est bon, j'ai fini par régler le soucis et ça marche nickel. Merci beaucoup pour ton aide.
Eshra est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 04h46.


 
 
 
 
Partenaires

Hébergement Web