Salut les amis. Le point fort de ce tutoriel est précis détection de frappe d'un laser généré. Ce type d'intelligence artificielle est utile pour créer des jeux d'action, en particulier dans le cas du renseignement de sécurité avec des caméras, des pistolets laser, etc. Placez donc votre fusée sur le dos, le compte à rebours commence?
Jetons un coup d'œil au résultat final sur lequel nous allons travailler:
Ouvrez Flash et créez un nouveau document Flash (ActionScript 3.0)..
Définissez la taille de la scène sur n'importe quelle résolution standard. Le mien est 500 x 350 px.
Définissez la cadence d'images sur 24 ips.
Enregistrez le fichier dans un dossier de votre choix.
Créons maintenant un générateur laser.
Tracez un cercle de rayon 20, soit 40 x 40. Remplissez-le également avec une jolie couleur de dégradé radial.
Maintenant, nous devons convertir ce cercle en symbole Flash afin de pouvoir le contrôler avec ActionScript..
Sélectionnez le cercle et appuyez sur F8 ou allez à Modifier> Convertir en symbole. Sélectionnez Clip pour le type de symbole. Définissez également le point d’alignement sur le centre de sorte que le générateur laser tourne à partir de son centre. Type laserGenerator_MC
dans le champ Nom de l'occurrence, puis dernier mais non des moindres, cochez la case "Exporter pour ActionScript" dans le groupe "Avancé" afin que nous puissions accéder au générateur laser de notre classe de documents que nous allons bientôt rencontrer..
Après avoir défini toutes les options ci-dessus, appuyez sur OK. Appuyez à nouveau sur OK pour la boîte de dialogue affichant l'avertissement pour la définition de classe. Cela créera une définition de classe pour le générateur laser lors de l'exécution.
Maintenant nous n'avons pas besoin laserGenerator_MC
symbole sur la scène puisqu'il est disponible dans le panneau Bibliothèque avec le nom de l'identifiant laserGenerator_MC
. Par conséquent, supprimez ce symbole de la scène. Votre scène devrait être vide maintenant.
Maintenant que nous allons ajouter une bouche à ce générateur pour créer une sensation d'appareil. Dans le panneau de la bibliothèque, double-cliquez sur laserGenerator_MC
l’icône du symbole (à gauche du nom du symbole) pour passer en mode édition. Ajoutez la bouche comme indiqué ci-dessous.
N'hésitez pas à ajouter votre propre design.
Remarque: Ne changez pas la position du cercle car nous devons le faire pivoter autour de son centre..
Après avoir ajouté une bouche au générateur, quittez le mode d’édition des symboles et revenez au scénario principal..
Votre fusée a quitté le sol. Le générateur laser est prêt et en attente d'exécution.
Pour ajouter un drame à notre scène, nous avons besoin d'ActionScript. Pour agir intelligemment, nous avons besoin de la classe de document.
Dans cette étape, nous allons créer une structure de base de notre classe de documents.
Pour une explication détaillée de la classe de document, consultez ce conseil rapide..
Créez donc un nouveau fichier ActionScript 3.0. Tapez le code suivant:
package classe publique Laser_HitDetection fonction publique Laser_HitDetection () // code constructeur
Enregistrer cette classe de document sous Laser_HitDetection.as dans le même dossier où vous avez enregistré votre fichier FLA pour ce didacticiel. Bien décoller. Votre classe de document de base est prête.
Dans votre fichier FLA, accédez au panneau Propriétés du document et tapez le nom de la classe dans le champ Classe de document disponible sous le groupe "Publier"..
Nous sommes maintenant prêts à communiquer avec la FLA à travers cette Laser_HitDetection.as classe de document.
Nous allons créer une instance de générateur laser à partir de la bibliothèque et la placer au centre de la scène..
Modifier le Laser_HitDetection.as classe de document comme indiqué ci-dessous (lignes en surbrillance):
package import flash.display.Sprite; Classe publique Laser_HitDetection étend Sprite var laserGun: Sprite; // Instance de laserGenerator_MC // Fonction publique du constructeur Laser_HitDetection () CreateLaserGun (); // Récupère et place le générateur laser à partir de la fonction publique de bibliothèque CreateLaserGun (): void laserGun = new laserGenerator_MC (); // Récupère-le de la bibliothèque addChild (laserGun); // Place le générateur laser au centre de la scène laserGun.x = stage.stageWidth / 2; laserGun.y = stage.stageHeight / 2;
Si vous testez le film maintenant, vous verrez notre pistolet laser bien placé au centre de la scène..
CreateLaserGun ()
méthodeDans le code ci-dessus, nous avons utilisé Lutin
classe pour créer une instance d'objet Sprite qui tiendra laser. Pour cela nous déclarons variable comme:
var laserGun: Sprite;
Puis nous avons ajouté une nouvelle méthode "CreateLaserGun ()"dans lequel nous avons assigné une instance de laserGenerator_MC
de la bibliothèque à ce qui précède pistolet laser
var comme:
laserGun = nouveau laserGenerator_MC ();
Après l'avoir ajouté à la scène, nous l'avons placé au centre de la scène comme suit:
laserGun.x = stage.stageWidth / 2; laserGun.y = stage.stageHeight / 2;
Enfin, nous avons appelé cette méthode à partir de la méthode constructeur de la classe de document:
// Fonction publique constructeur Laser_HitDetection () CreateLaserGun ();
Rocket accélère à pleine poussée. Nous allons activer ce pistolet laser très bientôt qui projettera le laser. Avant cela, nous ajouterons quelques obstacles. Allons-y.
Pour expérimenter la détection des hits, nous avons besoin d'obstacles placés sur la scène. Ainsi, dessinez sur la scène différentes formes ressemblant à des surfaces convexes-concaves, des montées en pente et des arêtes droites, comme indiqué ci-dessous:
Maintenant, nous allons mettre toutes ces formes dans un symbole. Sélectionnez toutes les formes à la fois et appuyez sur F8 ou allez à Modifier> Convertir en symbole. Sélectionnez Clip comme type de symbole. Nommez ce symbole obstacles_MC
dans le champ de texte du nom. Définir le point d'enregistrement au centre. Cochez également "Exporter pour ActionScript" afin que nous puissions y accéder à partir de notre classe de document..
Après la conversion en MovieClip, nous avons obstacles_MC
dans la bibliothèque avec le même nom d'identifiant. Simlilary comme laserGenerator_MC
nous n'avons pas besoin de ce symbole sur la scène, alors supprimez-le de la scène. Maintenant votre scène est vide.
La façon dont nous avons placé notre laserGenerator_MC
sur la scène, au centre, de même nous allons placer obstacles_MC
symbole sur la scène. Modifiez la classe de document comme indiqué ci-dessous:
package import flash.display.Sprite; Classe publique Laser_HitDetection étend Sprite var laserGun: Sprite; // Instance de laserGenerator_MC var obstacles: Sprite; // Instance d'obstacles_MC // Fonction publique du constructeur Laser_HitDetection () CreateLaserGun (); CreateObstacles (); // Récupère et place le générateur laser à partir de la fonction publique de bibliothèque CreateLaserGun (): void laserGun = new laserGenerator_MC (); // Récupère-le de la bibliothèque addChild (laserGun); // Place le générateur laser au centre de la scène laserGun.x = stage.stageWidth / 2; laserGun.y = stage.stageHeight / 2; // Obtient et place les obstacles de la fonction publique de bibliothèque CreateObstacles (): void obstacles = new obstacles_MC (); // Récupère-le de la bibliothèque addChild (obstacles); // Place les obstacles au centre de la scène obstacles.x = stage.stageWidth / 2; obstacles.y = stage.stageHeight / 2;
Testez le film pour voir les obstacles placés autour du pistolet laser.
Votre fusée a atteint sa vitesse limite. Il est maintenant temps d'activer le pistolet laser. Il doit générer le laser à partir de celui-ci. Faisons-le maintenant.
Comment allons-nous imiter le laser? Toute proposition?? Pourquoi ne pas utiliser certains membres de la classe Graphics comme lineStyle ()
, déménager à()
, lineTo ()
. Si vous connaissez ces méthodes, votre travail est facile. Pour ceux qui ne connaissent pas ces méthodes, nous sommes toujours avec vous. Laissez-nous les voir en détail.
Nous allons ajouter une nouvelle méthode ProjectLaser ()
. Laissez-nous modifier notre Laser_HitDetection
classe de document comme indiqué ci-dessous:
// package constructeur import flash.display.Sprite; Classe publique Laser_HitDetection étend Sprite var laserGun: Sprite; // Instance de laserGenerator_MC var obstacles: Sprite; // Instance d'obstacles_MC var laser: Sprite; var startX: nombre; // x point de départ du laser var startY: Number; // y point de départ du laser var endX: Number; // x extrémité du laser var endY: Number; // y point final du laser // Constructeur fonction publique Laser_HitDetection () CreateLaserGun (); CreateObstacles (); ProjectLaser (); // Récupère et place le générateur laser à partir de la fonction publique de bibliothèque CreateLaserGun (): void laserGun = new laserGenerator_MC (); // Récupère-le de la bibliothèque addChild (laserGun); // Place le générateur laser au centre de la scène laserGun.x = stage.stageWidth / 2; laserGun.y = stage.stageHeight / 2; // Obtient et place les obstacles de la fonction publique de bibliothèque CreateObstacles (): void obstacles = new obstacles_MC (); // Récupère-le de la bibliothèque addChild (obstacles); // Place les obstacles au centre de la scène obstacles.x = stage.stageWidth / 2; obstacles.y = stage.stageHeight / 2; // Projeter un laser à partir d'une fonction publique d'un dispositif générateur de laser ProjectLaser (): void laser = new Sprite (); addChild (laser); // Définition de l'origine du laser comme centre du pistolet laser startX = laserGun.x; startY = laserGun.y; // Définit le point final du laser endX = startX + 230; endY = startY; // Draw laser laser.graphics.lineStyle (1, 0xFF0000); laser.graphics.moveTo (startX, startY); laser.graphics.lineTo (endX, endY);
Testez le film.
La fusée est là-haut dans le ciel. Le pistolet laser a commencé à projeter le laser. Comment est-ce arrivé? Essayons de comprendre le code ci-dessus à l'étape suivante.
Dans l'étape ci-dessus, nous avons projeté avec succès un laser. Pour cela nous avons effectué les tâches suivantes:
Premièrement, nous avons déclaré cinq nouvelles variables:
var laser: Sprite; var startX: nombre; // x point de départ du laser var startY: Number; // y point de départ du laser var endX: Number; // x extrémité du laser var endY: Number; // y point final du laser
Deuxièmement, nous avons ajouté une nouvelle méthode ProjectLaser ()
:
fonction publique ProjectLaser (): void laser = new Sprite (); addChild (laser); // Définition de l'origine du laser comme centre du pistolet laser startX = laserGun.x; startY = laserGun.y; // Définit le point final du laser endX = startX + 230; endY = startY; // Draw laser laser.graphics.lineStyle (1, 0xFF0000); laser.graphics.moveTo (startX, startY); laser.graphics.lineTo (endX, endY);
ProjectLaser ()
MéthodeDans la méthode ci-dessus, nous avons d'abord créé un objet Sprite vide pour contenir le laser et l'avons ajouté à la scène, comme indiqué ci-dessous:
laser = nouveau Sprite (); addChild (laser);
Comme nous voulions que le laser commence à projeter à partir du pistolet laser, nous attribuons la valeur X du pistolet laser à startX
et Y valeur à début
comme indiqué ci-dessous:
startX = laserGun.x; startY = laserGun.y;
(Plus tard, nous avons fourni ces valeurs au moveTo (startX, startY)
méthode que nous allons bientôt rencontrer.)
Puis nous avons défini endX
et fin
:
endX = startX + 230; endY = startY;
Les valeurs affectées aux variables ci-dessus sont des valeurs temporaires. Nous les avons utilisés uniquement pour montrer la projection de base d'un laser. Dans les étapes suivantes, nous modifierons ces valeurs en appliquant des calculs simples. Ces valeurs sont essentielles pour une détection parfaite du laser. Nous les étudierons plus tard dans cette session.
Et maintenant la partie importante de cette méthode. Tracer une ligne droite dans un objet sprite laser pour imiter le laser projeté.
Nous avons d'abord traité le style de la ligne à tracer comme indiqué ci-dessous:
laser.graphics.lineStyle (1, 0xFF0000);
Cette méthode lineStyle () permet de contrôler le style du trait de l'objet de dessin, tel que ligne, rectangle, ovale, etc. Vous pouvez fournir au maximum huit arguments à cette méthode. Si non spécifié, des valeurs par défaut sont attribuées à la place. Pour notre exemple, nous n'avons besoin que de deux arguments. Le premier argument est l'épaisseur de la ligne (c'est-à-dire 1) et le second argument est la couleur de la ligne (c'est-à-dire. 0xFF0000
, qui est rouge).
Pour une explication détaillée de cette méthode, consultez le document d’aide Adobe sur la méthode "lineStyle (args?)".
Ensuite, nous avons placé le point de départ de la ligne comme indiqué ci-dessous:
laser.graphics.moveTo (startX, startY);
startX
et début
assure que le point de départ doit être le centre du pistolet laser.
Après cela nous avons terminé la ligne:
laser.graphics.lineTo (endX, endY);
Rappelez-vous que ces endX et endY sont des valeurs temporaires simplement pour montrer la projection. Nous avons besoin qu'ils soient ajustés si un obstacle venait à empêcher le laser. Nous ferons ce calcul dans les prochaines étapes.
Nous avons donc tiré une ligne de (startX
, début
) à (endX
, fin
).
La fusée va et vient. Voir ces paysages, paysages aquatiques?
Maintenant, il est temps d'agir concrètement. Détection des obstacles avec obstacles.
Maintenant, nous sommes équipés d'un pistolet laser. Nous avons également plusieurs obstacles. Nous sommes au niveau où nous pouvons ajouter la détection des hits, ce qui ajoutera certainement du sens à la scène..
Vous pensez peut-être que cette détection très précise nécessitera des calculs complexes. Si c'est le cas, vous vous trompez. Il utilise simplement la méthode intégrée d'ActionScript hitTestPoint () avec un pour
boucle. Le calcul complexe derrière la détection des coups parfaits est traité par cette méthode. Vous devez seulement utiliser cette méthode et un pour
boucle d'une manière intelligente.
Nous allons apporter d'importants changements à notre classe de documents principalement pour ProjectLaser ()
méthode et quelques nouveaux vars, alors observez et appliquez-le soigneusement. Laissez-nous le modifier comme indiqué:
Ajoutez d'abord ces nouveaux vars:
var rad: Number = Math.PI / 180; // Utilisé pour calculer l'angle en radians var maxDist: Number = 250; // distance maximale à parcourir par le laser var var adjustDist: Number; // nouvelle distance maximale en cas d'obstacle
Puis modifier ProjectLaser ()
méthode en ajoutant pour
boucle comme indiqué ci-dessous (notez également que maintenant endX
et fin
sont à l'intérieur pour
boucle):
// Projeter un laser à partir d'une fonction publique de dispositif générateur de laser ProjectLaser (): void laser = new Sprite (); addChild (laser); // Définition de l'origine du laser comme centre du pistolet laser startX = laserGun.x; startY = laserGun.y; pour (indexé = 0; indexé < maxDist; adjustedDist ++) //Trigonometry to aim the laser w.r.t laser gun's rotation endX = laserGun.x + Math.cos ( laserGun.rotation * rad ) * adjustedDist; endY = laserGun.y + Math.sin ( laserGun.rotation * rad ) * adjustedDist; //calculate hit test if ( obstacles.hitTestPoint ( endX, endY, true ) ) break; //Draw laser laser.graphics.lineStyle( 1, 0 x FF0000 ); laser.graphics.moveTo( startX, startY ); laser.graphics.lineTo ( endX, endY );
Testez le film.
Boom? Je suis sûr. En regardant cet effet, vous êtes inspiré pour créer un jeu Flash doté d'une intelligence de sécurité. Perfect AI, pour développer un jeu intéressant en Flash.
Tout d'abord, nous avons ajouté de nouveaux vars à notre classe de documents, comme indiqué:
Au départ, un angle, en radians
var rad: Number = Math.PI / 180; // Utilisé pour calculer l'angle en radians
La variable ci-dessus est utilisée dans la formule pour calculer un angle en radians.
La formule est, radians = degrés * Math.PI / 180
. Plus d'infos ici. Nous avons utilisé cette formule dans notre code, dans ces lignes:
endX = laserGun.x + Math.cos (laserGun.rotation * rad) *justDist; endY = laserGun.y + Math.sin (laserGun.rotation * rad) *justDist;
Dans laserGun.rotation * rad
, degrés = laserGun.rotation
, et rad = Math.PI / 180
.
Deuxièmement, nous avons créé un var pour la distance maximale à parcourir par le laser:
var maxDist: Number = 250; // distance maximale à parcourir par le laser
Cette variable détermine la distance maximale à parcourir par le laser. Comme il n'est pas nécessaire de dessiner le laser au-delà de la zone visible, nous définissons un point final agréable. Ce var fera ce qu'il faut.
Troisièmement, nous avons un var pour la distance actuelle du laser au moment de l'intersection avec un obstacle.
varjustDist: Number; // nouvelle distance maximale en cas d'obstacle
Lorsqu'un obstacle se trouve sur le chemin du laser, le laser est bloqué plutôt que de se déplacer à une distance maximale..
La distance après le blocage d'un laser n'est rien d'autre que la distance ajustée en fonction de la situation.
le pour
boucle et hitTestPoint ()
chacun joue un rôle important dans le calcul de cette distance.
Quatrièmement, nous avons modifié ProjectLaser ()
méthode en ajoutant le code ActionScript hitTestPoint ()
avec un pour
boucle. Nous avons réaffecté endX
et fin
les variables.
pour (indexé = 0; indexé < maxDist; adjustedDist ++) //Trigonometry to aim the laser w.r.t laser gun's rotation endX = laserGun.x + Math.cos ( laserGun.rotation * rad ) * adjustedDist; endY = laserGun.y + Math.sin ( laserGun.rotation * rad ) * adjustedDist; //calculate hit test if ( obstacles.hitTestPoint ( endX, endY, true ) ) break;
La boucle for garantit que la distance ajustée sera augmentée jusqu’à la distance maximale. Vous pensez peut-être "Quel est l'intérêt de faire en sorte que la distance ajustée soit égale à la distance maximale?"
En fait, cette distance ajustée est autorisée à correspondre à la distance maximale naturellement mais dès qu’elle rencontre un obstacle (qui est détecté par hitTestPoint ()
méthode) cette distance est marquée comme distance maximale pour cette situation actuelle. Grâce à hitTestPoint ()
pour rendre la tâche si simple.
Nous avons également réaffecté endX
et fin
valeurs en tant que:
endX = laserGun.x + Math.cos (laserGun.rotation * rad) *justDist; endY = laserGun.y + Math.sin (laserGun.rotation * rad) *justDist;
Les fonctions trigonométriques Math.cos ()
et Math.sin ()
sont utilisés pour calculer l'angle de rotation du pistolet laser w.r.t.
Sous une forme simple, il prend soin de diriger le laser à la recherche du pistolet laser. Il est important que le pistolet laser et le laser soient synchronisés. Donc, chaque fois que le pistolet laser est en rotation, le laser suivra la rotation.
Pour plus d'informations sur la trigonométrie, lisez ce petit conseil..
Enfin le point culminant de la scène:
if (obstacles.hitTestPoint (endX, endY, true)) break;
hitTestPoint ()
La méthode utilise trois paramètres, parmi lesquels les premier et deuxième paramètres sont nécessaires et le troisième (shapeFlag
) restera comme valeur par défaut (i.e. faux
) si non spécifié.
Dans notre exemple, shapeFlag
est réglé sur vrai
puisque nous voulons une détection des impacts en fonction de la forme exacte de l’objet cible (c.-à-d.. obstacles
). Si cette valeur est définie sur faux
la détection des impacts se produit par rapport à la boîte englobante de cet objet et non à la forme exacte.
Les premier et deuxième paramètres de hitTestPoint ()
définir un point (x, y) pour vérifier l'intersection avec l'objet d'affichage. Dans notre cas obstacles
est cet objet d'affichage, et endX
et fin
représente le point d'intersection sur la scène.
Pas clair? Droite. Pour simplifier, nous allons mettre la logique en séquence comme suit:
pour
boucle permet à la projection du laser de continuer (en mettant à jour endX
et fin
) si dans la distance maximale.hitTestPoint ()
attend de casser la pour
boucle dès qu'il voit l'intersection. Une fois la pour
la boucle est cassée, endX
et fin
sont gelés.endX
et fin
sont passés au graphics.lineTo ()
méthode.Pour ajouter la rotation au pistolet laser, nous devons effectuer quelques changements majeurs:
ProjectLaser ()
méthode.HitTest ()
.laser.graphics.clear ()
dans le pour
boucle.importer flash.events.Event
Nous allons d'abord restructurer le ProjectLaser ()
méthode en décalant toute la logique de détection de hit dans une nouvelle méthode HitTest ()
.
Ensuite, nous ajouterons laser.graphics.clear ()
déclaration avant laser.graphics.lineStyle (1, 0xFF0000)
déclaration à l'intérieur du pour
boucle de nouvelle méthode HitTest ()
. Cela supprimera l'ancienne projection du laser de la scène lorsque le pistolet laser commencera à tourner.
Voyons comment cela se passera après les quatre changements majeurs:
fonction publique ProjectLaser (): void laser = new Sprite (); addChild (laser); // Définition de l'origine du laser comme centre du pistolet laser startX = laserGun.x; startY = laserGun.y; // Hit test public function HitTest (): void pour (justedist = 0; rajusté < maxDist; adjustedDist ++) //Trigonometry to aim the laser w.r.t laser gun's rotation endX = laserGun.x + Math.cos(laserGun.rotation * rad) * adjustedDist; endY = laserGun.y + Math.sin(laserGun.rotation * rad) * adjustedDist; //calculate hit test if (obstacles.hitTestPoint(endX,endY,true)) break; //Draw laser laser.graphics.clear(); //Removes the old laser projection laser.graphics.lineStyle( 1, 0xFF0000 ); laser.graphics.moveTo( startX, startY ); laser.graphics.lineTo ( endX, endY );
Vous vous demandez peut-être pourquoi nous avons apporté des changements aussi importants? La seule raison est ENTER_FRAME
un événement.
Pour appliquer la rotation continue nous allons ajouter une nouvelle méthode, LaserGunRotation (evt: Event)
qui est activé par ENTER_FRAME
événement (ce qui signifie qu'il est exécuté 24 fois par seconde, car notre fréquence d'images est de 24 images par seconde). Lorsque cet événement est utilisé, vous devez veiller à n'ajouter que les propriétés que nous souhaitons modifier sur une période donnée. Eviter de mettre des valeurs qui restent constantes tout au long de l'exécution.
Dans notre cas, si vous observez vieux ProjectLaser ()
méthode, il a:
laser = nouveau Sprite (); addChild (laser); // tourne le pistolet laser
Imaginez si vous ajoutez les instructions ci-dessus dans une méthode utilisant ENTER_FRAME
un événement; alors un nouvel objet laser Sprite serait créé et ajouté à la scène à plusieurs reprises - 24 fois par seconde.
C'est absolument inutile. Nous avons donc restructuré ProjectLaser ()
méthode et nouvelle méthode ajoutée HitTest ()
. Vous pouvez renommer ProjectLaser ()
méthode pour InitializeLaser ()
puisqu'il ne projette plus le laser. À présent, il crée uniquement le support vide pour le laser et définit son point de départ. La projection est traitée dans une nouvelle méthode, HitTest ()
.
Voyons maintenant la nouvelle méthode LaserGunRotation (evt: Event)
. Avant cela, ajoutez l'instruction d'importation suivante au début de la classe de document:
import flash.events.Event;
Et ajoutez la méthode suivante:
// Fonction publique Rotate Laser Gun LaserGunRotation (evt: Event): void laserGun.rotation + = 0.5; HitTest ();
De plus, n’oubliez pas d’appeler cette méthode avec un ENTER_FRAME
événement à l'intérieur de la fonction constructeur, comme indiqué ci-dessous:
// Fonction publique constructeur Laser_HitDetection () CreateLaserGun (); CreateObstacles (); ProjectLaser (); addEventListener (Event.ENTER_FRAME, LaserGunRotation);
Cela le configure pour exécuter le LaserGunRotation ()
fonction 24 fois par seconde.
Testez le film.
La fusée a déjà pénétré dans les nuages. Voir la belle terre.
Dans cette étape, nous allons ajouter un contrôle pour ajuster la précision de la détection des impacts. Ceci est important car vous n'avez pas besoin de la détection précise des coups à chaque fois; vous aurez peut-être besoin d'un niveau moyen de détection des hits. Cela contribuera également à réduire la consommation de processeur au moment de la détection des impacts..
Nous allons introduire une nouvelle variable tolérance
comme:
var tolérance: Nombre = 1;
Ensuite, nous modifierons le pour
L'instruction d'incrément de la boucle en tant que:
pour (indexé = 0; indexé < maxDist; adjustedDist += tolerance)
Maintenant, la boucle for ressemblera à ceci:
pour (indexé = 0; indexé < maxDist; adjustedDist += tolerance) //Trigonometry to aim the laser w.r.t laser gun's rotation endX = laserGun.x + Math.cos(laserGun.rotation * rad) * adjustedDist; endY = laserGun.y + Math.sin(laserGun.rotation * rad) * adjustedDist; //calculate hit test if (obstacles.hitTestPoint(endX,endY,true)) break;
Cela signifie qu'au lieu de rechercher une collision à chaque pixel de la ligne laser, nous ne vérifions qu'une collision à chaque pixel, ou à tous les trois pixels, etc..
Réduire la valeur de "tolérance" augmentera la précision de la détection des résultats, mais nécessitera plus de puissance du processeur. Essayez d’expérimenter différentes valeurs de "tolérance".
Amis, il est temps de quitter la fusée et d'ouvrir le parachute. Atterrissez en toute sécurité sur le sol et commencez à utiliser la technique ci-dessus dans vos jeux et applications Flash. Prendre plaisir!
Dans ce tutoriel, nous avons principalement constaté la parfaite utilisation de hitTestPoint ()
et un pour
boucle pour créer une détection précise des résultats sans utiliser aucun calcul complexe.
Cet effet peut être utilisé dans un jeu d'action de type sécurité nécessitant des caméras et des pistolets laser..