Création d'interactivité avec ActionScript > Création d'interactivité complexe > Détection des collisions

 

Détection des collisions

La méthode hitTest de l'objet MovieClip détecte les collisions dans une animation. Elle vérifie si un objet est entré en collision avec un clip et renvoie une valeur booléenne (true ou false).

Il existe deux situations où il peut être utile de savoir si une collision s'est produite : pour tester si l'utilisateur a atteint une zone statique précise de la scène, et pour déterminer si un clip en a atteint un autre. La méthode hitTest permet de déterminer ces résultats.

Vous pouvez utiliser les paramètres de la méthode hitTest pour définir les coordonnées x et y d'une zone de collision sur la scène ou utiliser le chemin cible d'un autre clip comme zone de collision. Lorsque vous définissez x et y, hitTest renvoie true si le point identifié par (x,y) n'est pas transparent. Si une cible est transmise à hitTest, les cadres de délimitation des deux clips sont comparés. S'ils se chevauchent, hitTest renvoie true. Si les deux ne se coupent pas, hitTest renvoie false.

Placez la souris sur la forme de l'animation pour tester la collision. Les résultats de la méthode hitTest sont renvoyés dans le champ de texte.

Vous pouvez également utiliser la méthode hitTest pour tester une collision entre deux clips.

Pour tester la collision, faites glisser le clip de la voiture pour le faire entrer en contact avec le clip du parking. Les résultats de la méthode hitTest sont renvoyés dans le champ de texte.

Les procédures suivantes indiquent comment détecter les collisions, en utilisant une voiture comme exemple.

Pour détecter la collision entre un clip et un point de la scène (voir shape_flag.fla) :

1

Sélectionnez un clip sur la scène.

2

Créez un champ de texte dynamique sur la scène et entrez état comme nom d'occurrence dans l'inspecteur des propriétés.

3

Choisissez Fenêtre > Actions pour ouvrir le panneau Actions si ce dernier n'est pas déjà visible.

4

Dans la boîte à outils du panneau Actions, cliquez sur la catégorie Actions, puis sur Variables et double-cliquez sur set variable, puis nommez la variable _root.état. Activez l'option Expression pour Valeur et entrez le code suivant dans le champ Valeur :

hitTest(_root._xmouse, _root._ymouse, true)

Flash ajoute automatiquement le gestionnaire onClipEvent.

5

Sélectionnez l'action onClipEvent et l'événement enterFrame.

6

Choisissez Contrôle > Tester l'animation et passez la souris sur le clip pour tester la collision.

La valeur true est affichée lorsque la souris se trouve au-dessus d'un pixel non transparent.

Pour détecter la collision entre deux clips (voir hit_test.fla) :

1

Faites glisser deux clips jusqu'à la scène et affectez-leur les noms d'occurrence voiture et zone.

2

Créez un champ de texte dynamique sur la scène et entrez état comme nom d'occurrence dans l'inspecteur des propriétés.

3

Sélectionnez zone et choisissez Fenêtre > Actions pour ouvrir le panneau Actions si ce dernier n'est pas déjà visible.

4

Pour appliquer le test hitTest, dans la boîte à outils Actions, cliquez sur la catégorie Actions, puis sur Actions diverses et double-cliquez sur evaluate. Entrez le code suivant dans le champ Expression :

_root.status=this.hitTest(_root.car);

Flash ajoute automatiquement le gestionnaire onClipEvent.

5

Sélectionnez l'action onClipEvent et l'événement enterFrame.

6

Sélectionnez car dans le menu déroulant en haut du panneau Actions.

7

Pour appliquer le mouvement à la voiture, dans la boîte à outils Actions, cliquez sur la catégorie Actions, puis sur Contrôle sur les clips et double-cliquez sur startDrag.

8

Pour limiter le mouvement de la voiture, activez les options Verrouiller la souris au centre et Contraindre en rectangle, puis entrez 4 pour la gauche, 70 pour le haut, 396 pour la droite et 273 pour le bas.

Flash ajoute automatiquement le gestionnaire onClipEvent.

9

Sélectionnez l'action onClipEvent dans le volet Script et sélectionnez l'événement Mouse down.

Le code devrait avoir cette forme :

onClipEvent (mouseDown) {
	startDrag("", true, 4, 70, 396, 273);
}

10

Pour arrêter la voiture, dans la boîte à outils Actions, cliquez sur la catégorie Actions, puis sur Contrôle sur les clips et double-cliquez sur stopDrag.

Flash ajoute automatiquement le gestionnaire onClipEvent.

11

Sélectionnez l'action onClipEvent dans le volet Script et sélectionnez l'événement Mouse up.

Le code devrait avoir cette forme :

onClipEvent (mouseDown) {
	startDrag("", true, 4, 70, 396, 273);
}
onClipEvent (mouseUp) {
    stopDrag();
}

12

Choisissez Contrôle > Tester l'animation et faites glisser le clip pour tester la détection de collisions.

Lorsque le cadre de délimitation de la voiture touche celui de la zone, l'état devient true.

Pour plus d'informations, consultez MovieClip.hitTest dans le dictionnaire ActionScript.