Construisez un jeu de frisbee en Flash simple avec AS3

Dans ce tutoriel, nous allons construire un jeu très simple, "Keepy-Uppy". Cliquez sur le frisbee pour l'envoyer vers le ciel, puis faites-le tourner avec votre souris pour l'empêcher de tomber! Recueillir des power-ups pour changer la taille du disque.

Aperçu du résultat final

Jetons un coup d'œil au résultat final sur lequel nous allons travailler:


Étape 1: bref aperçu

En utilisant des éléments graphiques prédéfinis, nous allons créer une interface attrayante qui sera alimentée par plusieurs classes ActionScript 3.

L'utilisateur pourra déplacer un personnage sur la scène, collecter des objets de mise à niveau et vaincre la gravité. Vous pouvez modifier les valeurs de la classe pour personnaliser le jeu..


Étape 2: Paramètres du document Flash

Ouvrez Flash et créez un document de 320 pixels de large et 480 pixels de haut. Définir le taux de trame à 24fps.


Étape 3: interface

Une belle interface colorée sera affichée, cela implique plusieurs formes, boutons et plus.
La plupart des graphiques que nous avons utilisés ont été créés dans des tutoriels précédents. Il n'est donc pas nécessaire d'inclure leur création..


Étape 4: noms d'instance

L'image ci-dessus montre la Noms d'instance utilisé dans le MovieClips. Ceux qui commencent par un Lettre capitale sont Noms de classe de la bibliothèque et ne devrait pas être sur scène, il y a aussi deux clips de nuages ​​au-dessus de ce graphique, ils sont appelés des nuages et nuages2.


Étape 5: Tween Nano

Nous utiliserons un moteur d'interpolation différent de celui par défaut inclus dans le flash, ce qui augmentera les performances et facilitera l'utilisation..

Vous pouvez télécharger TweenNano de son site officiel. Apprenez à l'ajouter à votre projet ici.


Étape 6: créer une nouvelle classe ActionScript

Créez une nouvelle classe ActionScript 3.0 (Cmd + N) et enregistrez-la sous Main.as dans votre dossier de classe.


Étape 7: Structure de classe

Créez votre structure de classe de base pour commencer à écrire votre code.

 package import flash.display.Sprite; classe publique Main étend Sprite fonction publique Main (): void // code constructeur

Étape 8: Classes requises

Ce sont les classes que nous devons importer pour que notre classe fonctionne, le importation directive met à la disposition de votre code des classes et des packages définis en externe.

 import flash.display.Sprite; import flash.events.MouseEvent; import flash.events.Event; import flash.net.navigateToURL; import flash.net.URLRequest; import com.greensock.TweenNano; importer com.greensock.easing.Elastic; import flash.utils.Timer; import flash.events.TimerEvent;

Étape 9: Variables

Ce sont les variables que nous allons utiliser, lisez les commentaires dans le code pour en savoir plus à leur sujet, certains de leurs noms s’expliquent d'eux-mêmes, il n'y aura donc pas de commentaire.

 private var first time: Boolean = true; gravité privée var: int = 2; private var throwSpeed: int; var privé xMouse: int; var privé xSpeed: int; variable privée topHeight: int = 40; private var top: Boolean; score var privé: int = 0; var scoreVal privé: int = 1; private var timer: Timer = new Timer (10000); private var cancelBonus: Minuterie = nouvelle minuterie (3000); mise à niveau privée de la var: Sprite;

Étape 10: constructeur

Le constructeur est une fonction qui s'exécute lorsqu'un objet est créé à partir d'une classe. Ce code est le premier à s'exécuter lorsque vous créez une instance d'un objet ou que vous l'exécutez à l'aide de la classe.

Il appelle les fonctions nécessaires pour démarrer le jeu. Vérifiez ces fonctions dans les prochaines étapes.

 fonction publique Main (): void addGameListeners (); 

Étape 11: Ajouter des auditeurs

Dans cette fonction, nous ajoutons le nombre initial d'auditeurs requis pour démarrer le jeu. Nous avons également mis le boutonMode propriété du frisbee à true (cela affichera le curseur de la main lorsque vous passerez la souris dessus) et masquera.

 fonction privée addGameListeners (): void frisbee.addEventListener (MouseEvent.MOUSE_UP, launchFrisbee); frisbee.buttonMode = true; indicateur.visible = faux; 

Étape 12: Lancez le frisbee

Le premier mouvement du frisbee activera les minuteries en charge des mises à niveau et appellera le mettre à jour fonction qui est la fonction principale du jeu.

 fonction privée launchFrisbee (e: MouseEvent): void frisbee.removeEventListener (MouseEvent.MOUSE_UP, launchFrisbee); frisbee.addEventListener (MouseEvent.MOUSE_UP, throwFrisbee); stage.addEventListener (Event.ENTER_FRAME, mise à jour); timer.addEventListener (TimerEvent.TIMER, showUpgrade); timer.start (); xSpeed ​​= 0; xMouse = frisbee.mouseX; throwSpeed ​​= 0; 

Étape 13: Lancer le frisbee

Cette fonction réinitialise les variables utilisées pour faire bouger et tomber le frisbee; il s'exécute chaque fois que l'on clique sur le frisbee.

 fonction privée throwFrisbee (e: MouseEvent): void xSpeed ​​= 0; xMouse = frisbee.mouseX; throwSpeed ​​= 0; top = false; 

Étape 14: Afficher les bulles de mise à niveau

Une fonction temporisée gérera les bulles de mise à niveau. La minuterie a été définie dans la déclaration des variables pour avoir un intervalle de 10 secondes. La première chose à faire est de rechercher une bulle précédente dans l’écran et de la supprimer s’il en existe une..

 fonction privée showUpgrade (e: TimerEvent): void / * Supprimer le sprite précédent * / if (upgrade! = null) removeChild (upgrade); upgrade = null; 

Étape 15: Amélioration des points doubles

Les mises à niveau sont des bulles qui apparaissent à l'écran et qui donneront au joueur des capacités spéciales ou des améliorations..

Le code suivant calcule un nombre aléatoire (il peut être 0 ou 1) et instancie la mise à niveau des points doubles si le nombre est 0.

 var randomNumber: int = Math.floor (Math.random () * 2); if (randomNumber == 0) upgrade = new Double (); upgrade.name = 'd'; 

Étape 16: Mise à niveau Big Frisbee

Si le nombre calculé est 1, la mise à niveau Big Frisbee est ajoutée à la scène. Un nom est donné aux mises à niveau pour déterminer sa valeur lorsque vous touchez.

 else upgrade = new Big (); upgrade.name = 'b';  upgrade.x = Math.floor (Math.random () * stage.stageWidth); // donne une position x aléatoire addChild (upgrade);

Étape 17: Annuler les mises à niveau

Une autre fonction chronométrée.

Ce sera appelé lorsque le joueur attrape la bulle de mise à niveau, en comptant 3 secondes pour mettre fin à l'effet de mise à niveau.

 fonction privée cancelUpgrade (e: TimerEvent): void cancelBonus.stop (); cancelBonus.removeEventListener (TimerEvent.TIMER, cancelUpgrade); scoreVal = 1; // annule les points doubles scoreTF.textColor = 0xffffff; frisbee.scaleX = 1; // Retourne l'échelle à la normale frisbee.scaleY = 1; 

Étape 18: Fonction de mise à jour

La fonction principale du jeu est de gérer les collisions avec les murs, les améliorations et le mouvement du frisbee à chaque image. Etant une fonction si importante et si étendue, nous la verrons dans la prochaine partie de ce didacticiel..

 mise à jour de fonction privée (e: Event): void 

Étape 19: Classe de document

Ajoutez le nom de la classe à la Classe champ dans le Publier section de la Propriétés panneau pour associer la FLA à la classe de document Main.


Étape 20: Fonction de mise à jour

La fonction principale du jeu, il gérera les collisions avec les murs, les mises à niveau et le mouvement du frisbee à chaque image, apprendra comment cela fonctionne dans les étapes suivantes..

 Mise à jour de la fonction finale privée (e: Event): void 

Étape 21: Déplacer le frisbee

Le frisbee sera déplacé en utilisant la valeur throwSpeed. Cette valeur changera plus tard dans le code pour faire monter le frisbee. Lorsque cette variable vaut 0, la gravité se déplacera vers le bas du frisbee..

 frisbee.y - = throwSpeed;

Étape 22: gravité

Le code suivant vérifie si le frisbee a atteint le point le plus haut autorisé, sinon la variable throwSpeed ​​augmente pour le faire monter. Dans le même temps, la variable est appliquée à la variable, ce qui la fait éventuellement perdre sa valeur positive et fait tomber le frisbee..

 if (throwSpeed> = topHeight) top = true;  if (throwSpeed < topHeight && !top)  throwSpeed += 5;  if(throwSpeed <= 0)  throwSpeed = 0;  throwSpeed -= gravity; frisbee.y += gravity * 3;

Étape 23: Position du clic

Le mouvement x du frisbee est calculé en fonction de la zone sur laquelle le joueur clique.

 si (xMouse < frisbee.width * 0.5)  frisbee.x += xSpeed; //click the left side, so move it right  if(xMouse > frisbee.width * 0.5) frisbee.x - = xSpeed; // cliquez sur le côté droit, déplacez-le donc à gauche

Étape 24: Réduisez la vitesse xSpeed

xSpeed ​​est la valeur qui fait bouger le frisbee à gauche ou à droite.

Ce code ralentit ce mouvement en soustrayant sa valeur jusqu'à ce que la hauteur maximale soit atteinte.

 si (xSpeed < topHeight * 0.01 && !top)  xSpeed += 1;  if(xSpeed <= 0)  xSpeed = 0; 

Arrêtons-nous ici pour faire un test rapide et nous assurer que notre code fonctionne:


Étape 25: rotation

Pour simuler le mouvement du frisbee, on tourne le une lettre à l'intérieur. (Ceci est un clip à l'intérieur du clip Frisbee, qui a un nom de l'instance de une lettre.)

 frisbee.aLetter.rotationZ + = 50;

Étape 26: Score

Le score augmente lorsque le frisbee quitte la scène et au moment où il est invisible pour le joueur. Si vous cliquez dessus plus haut, le score gagné sera plus élevé.

 si (frisbee.y < 0)  score += scoreVal; scoreTF.text = String(score);

Étape 27: Indicateur de position

Cet indicateur suit la position x du frisbee alors qu'il n'est pas en phase.

 indicateur.visible = vrai; indicateur.x = frisbee.x + (frisbee.width * 0.5);

Étape 28: Déplacer l'arrière-plan

Le code suivant déplace l'arrière-plan initial (s'il n'a pas été supprimé) et les nuages ​​qui seront réutilisés dans le jeu..

 if (bg! = null) bg.y + = throwSpeed; clouds.y + = throwSpeed; clouds2.y + = throwSpeed; 

Étape 29: Supprimer le fond initial

Le premier fond n'apparaitra qu'au début du jeu, il sera donc supprimé lorsque le joueur ne pourra plus le voir..

 if (bg! = null && bg.y> stage.stageHeight) removeChild (bg); bg = null; 

Étape 30: nuages ​​en boucle

L'arrière-plan des nuages ​​apparaîtra tout le temps pendant la durée de la partie. Lorsqu'un arrière-plan n'est plus visible, sa position est réinitialisée..

 if (clouds.y> stage.stageHeight) clouds.y = -280;  if (clouds2.y> stage.stageHeight) clouds2.y = -280; 

Arrêtons-nous encore une fois pour faire un test rapide et nous assurer que nous avons le score, l'indicateur, la rotation, les nuages ​​en boucle et les mises à niveau (bien qu'ils ne fassent rien encore?):

я


Étape 31: points doubles

Double points sont ajoutés au score lorsque le 2x la mise à jour est active, nous changeons également la couleur de la partition pour rendre le changement plus visible.

 if (upgrade! = null && frisbee.hitTestObject (upgrade) && upgrade.name == 'd') removeChild (upgrade); upgrade = null; scoreVal = 2; scoreTF.textColor = 0xf3ba35; cancelBonus.addEventListener (TimerEvent.TIMER, cancelUpgrade); cancelBonus.start (); 

Étape 32: Big Frisbee

Quand le joueur attrape le gros bulle, l’échelle de frisbee augmente de 1, ce qui facilite le clic.

 if (upgrade! = null && frisbee.hitTestObject (upgrade) && upgrade.name == 'b') removeChild (upgrade); upgrade = null; frisbee.scaleX = 2; frisbee.scaleY = 2;

Étape 33: Annuler les mises à niveau

La mise à niveau actuelle ne sera active que pendant 3 secondes. Lorsque ce temps sera écoulé, ses pouvoirs seront annulés..

 cancelBonus.addEventListener (TimerEvent.TIMER, cancelUpgrade); cancelBonus.start ();

Étape 34: Difficulté

La difficulté du jeu est la gravité, ce code modifie la gravité en fonction du score. Lorsque le score atteint 100, la gravité augmente de 0,5..

 si (score> = 100 && score < 102)  gravity += 0.5; 

Étape 35: Bordures d'écran

Des murs invisibles sont utilisés sur les côtés pour empêcher le frisbee de sortir de la scène.

 si (frisbee.x <= 0)//Left  frisbee.x = 0;  else if(frisbee.x >= (stage.stageWidth - frisbee.width)) // Droite frisbee.x = (stage.stageWidth - frisbee.width); 

Étape 36: Fin du jeu

Si le frisbee tombe jusqu'au fond, le jeu est terminé.

 if (frisbee.y> stage.stageHeight) gameOver (); 

Étape 37: Supprimer les auditeurs

Le code suivant désactive tous les événements de la souris et arrête le chronomètre, ce qui empêchera le jeu d’exécuter des activités indésirables..

 fonction finale privée gameOver (): void frisbee.removeEventListener (MouseEvent.MOUSE_UP, throwFrisbee); stage.removeEventListener (Event.ENTER_FRAME, mise à jour); timer.stop (); timer.removeEventListener (TimerEvent.TIMER, showUpgrade);

Étape 38: alerte

Cette fonction arrêtera le jeu et révélera le score final, elle ajoutera également un écouteur à la souris pour réinitialiser le jeu en cas de clic..

 var alert: AlertView = new AlertView (); alert.buttonMode = true; alert.x = stage.stageWidth * 0.5; alert.y = stage.stageHeight * 0,5; alert.scoreTF.text = scoreTF.text + '!'; alert.addEventListener (MouseEvent.MOUSE_UP, redémarrer); addChild (alerte); TweenNano.from (alert, 0.7, y: -alert.height, easy: Elastic.easeOut); 

Étape 39: Redémarrez

La fonction suivante rechargera le swf, relancera n'importe quelle variable, méthode et reviendra au premier écran.

 redémarrage de la fonction finale privée (e: MouseEvent): void browseToURL (new URLRequest (stage.loaderInfo.url), '_level0'); 

Avaient fini! Essaye le:


Conclusion

Vous avez créé un jeu très divertissant, essayez d'ajouter vos propres fonctionnalités et graphiques.

J'espère que vous avez aimé ce tutoriel, merci d'avoir lu!