Avoir un objet en orbite sur un autre est un mécanisme de mouvement utilisé depuis les débuts du jeu, et il reste pratique à ce jour! Dans cette astuce, nous allons explorer la fonction mathématique de l’orbite, voir comment la modifier et examiner les utilisations pratiques de la conception de jeux..
Voici ce que nous allons travailler vers:
Pour créer une orbite, nous devons définir les éléments suivants:
Il est également utile de noter que le système de coordonnées de Flash ressemble à un plan cartésien normal, à ceci près que l'axe des ordonnées est inversé. La valeur augmente lorsque vous descendez. Le coin supérieur gauche de la scène a des coordonnées (0,0)
Une autre chose que nous devons comprendre est comment convertir des degrés en radians, ce qui peut facilement être accompli en utilisant la formule suivante:
Radians = Degrés * (PI / 180)
Voici la fonction orbitale réelle: elle nécessite deux lignes, l’une pour positionner l’orbiteur sur l’axe des x et l’autre pour le positionner sur l’axe des y:
Orbiter X-Coord = Origine X-Coord + Rayon * cos (Radians)
Orbiter Y-Coord = Origine Y-Coord + Rayon * sin (Radians)
(Dans un plan cartésien normal, péché
est utilisé pour la coordonnée x et cos
est utilisé pour la coordonnée en Y, mais comme nos angles augmentent dans le sens des aiguilles d’une montre - en raison de l’inversion de l’axe des y - leurs places sont échangées.)
Nous pouvons maintenant transformer la logique en code réel que nous pouvons utiliser. Tout d'abord, déclarez toutes les variables:
public var orbiter: Orbiter = new Orbiter (); // Le MovieClip qui orbite public var origine: Origin = new Origin (); // Le MovieClip qui est orbité public var angle: Number = 0; // L'angle initial en orbite commence à partir de la vitesse publique var: Number = 3; // Nombre de pixels en orbite par image public var radius: Number = 75; // Distance en orbite de l'origine
Ensuite, réécrivez l’équation pour l’utiliser dans AS3 et mettez-la dans un ENTER_FRAME
fonction de gestionnaire d'événement:
var rad: Nombre = angle * (Math.PI / 180); // Conversion de degrés en radians orbiter.x = origine.x + rayon * Math.cos (rad); // Positionne l'orbiteur le long de l'axe des abscisses orbiter.y = origine.y + radius * Math.sin (rad); // Positionne l'orbiteur le long de l'axe des y
Si vous testez maintenant, rien ne se passera. c'est parce que l'angle variable n'est ni croissant ni décroissant. Par conséquent, nous devons augmenter ou diminuer la valeur:
angle + = vitesse; // L'objet orbitera dans le sens des aiguilles d'une montre - = speed; // L'objet orbite dans le sens anti-horaire
Et maintenant, si nous voulons que notre orbiteur continue à faire face à une direction? Eh bien, j'ai écrit une équation pour le faire!
orbiter.rotation = (Math.atan2 (orbiter.y-origin.y, orbiter.x-origin.x) * 180 / Math.PI);
En fonction de la manière dont vous avez dessiné votre MovieClip orbiter, vous devrez peut-être soustraire un certain angle (en dehors des crochets) pour obtenir le bon angle.
Cela peut paraître fou, mais certains d’entre nous voudront peut-être que notre objet orbite dans une ellipse. C'est facilement faisable. tout ce que nous avons à faire est de nous multiplier à un endroit spécifique de l'équation. Multipliant le cos
ou péché
fonctions par un nombre entier positif entraînera l’étirement du cercle. En le multipliant par un nombre décimal compris entre 0 et 1, il sera compressé. Et le multiplier par un négatif le fera basculer le long de cet axe:
(2 * Math.cos (rad)); // Étire l'orbite le long de l'axe des x d'un facteur 2 (0.5 * Math.sin (rad)); // Compresse l'orbite le long de l'axe des y d'un facteur 2 (c'est-à-dire qu'elle soit divisée par deux) (-3 * Math.cos (rad)); // Retourne l'orbite le long de l'axe des x et l'étire d'un facteur 3
Nous pouvons également déplacer l'orbite dans n'importe quelle direction souhaitée en ajoutant ou en soustrayant l'équation sur l'un ou l'autre axe:
orbiter.x = (origine.x + rayon * Math.cos (rad)) - 50; // Décale l'orbite de 50 pixels restants sur l'axe des x
Si vous voulez en savoir plus sur cos
, péché
, et atan2
, jetez un oeil à la trigonométrie pour les développeurs Flash.
Maintenant, tout va bien, mais à quoi cela peut-il réellement servir? Une grande variété de choses réellement!
Si vous avez déjà joué à Mario Kart, vous auriez obtenu le bonus "trois obus"; ces coquilles orbitent en utilisant cette technique même. Un autre exemple est le jeu de pong sur cercle largement utilisé, où la pagaie orbite le long d’un anneau à l’extérieur. Un troisième exemple est celui des jeux de tir de zombies descendants: beaucoup d'entre eux incluent un bonus où un groupe de barils orbite autour de votre joueur et écrase les zombies s'ils sont touchés en essayant de vous attaquer.
Comme vous pouvez le constater, cette technique peut être utilisée dans tous les types de jeux, des jeux standard aux jeux occasionnels..
Merci d'avoir pris le temps d'apprendre ce petit conseil! Si vous avez des questions, laissez un commentaire ci-dessous.