Accueil Profil Curriculum Vitae Articles Contact
search
Space wars : Fonction d'association des objets
Posté par eagle4 le 10/12/2010 15:28:27 (2403 lectures)

Bonjour à tous ! Ici Eagle4 ! Comment ça va les gens ?
(Petite intro en hommage à Pomf&Thud dont j'apprécie vachement le travail sur leur vidéo de Starcraft 2 ^^)

Aujourd'hui nous allons rentrer (ENFIN me direz vous) dans la partie technique, la plus complexe, celle qui permet de gérer tout nos calculs qui ont besoin de rapidité sur MMF2.

Avant de commencer, et pour comprendre bien ce dont je vais vous parler aujourd'hui, je vous conseil d'aller faire un tour vers ce tutoriel (très bien fait) de zoglu :

http://www.game-corp.net/tutorial-104.html

Nous allons rentrer dans le coeur du moteur de RTS et pour ce faire nous allons utiliser les fastloops afin d'identifier chaque unité dans nos fonctions.

Cela va nous permettre (entre autres) d'associer des objets avec nos unités qui seront intimement liées avec nos actifs d'unité.

Hop une petite image pour illustrer le fait que d'autres objets se "collent" sur nos unités :

Open in new window


Vous remarquerez ici que la minimap ou les barres de vies sont bien liés (au moins en position dans un premier temps) à nos unités.

Pour la partie compliqué et non moins intéressante allez lire la suite

Donc d'abord il faut comprendre pourquoi on utilise une fastloop.

Multimédia Fusion est un logiciel qui permet de "programmer" (j'insiste sur ce terme car même s'il n'y a pas de langage de programmation, on programme via une liste d'évènement, pour ceux qui ne sont pas d'accord, reportez vous à la définition dans un dictionnaire) facilement ou en tout cas, rapidement.

Pour ce faire, certaines fonctions sont réalisées de façon totalement transparente pour l'utilisateur (Ici le codeur, et non pas que le joueur), comme par exemple, la sélection d'une seule instance d'un objet parmi une liste de ce même type d'objet. C'est par exemple facile à montrer, si vous mettez cet évènement :

- L'utilisateur clic sur un objet balle -> balle est détruit

Alors seule la balle sur laquelle on aura cliquer sera détruite car multimédia fusion va tester si cette condition est vrai pour CHAQUE instance de l'objet "balle"

Si on a 30 balles, alors MMF va tester cet évènement 30 fois.

Ici c'est assez facile. Mais par exemple, si on a plusieurs objets bonhomme. Et qu'on a plusieurs objets chapeau, si on veut que chaque chapeau aille bien sur chaque bonhomme en temps réel, on ne peut pas juste écrire :

Toujours -> fixe position chapeau sur position bonhomme

Dans ce cas là, MMF va 20 fois (pour 20 bonhomme et 20 chapeau) fixer les 20 chapeaux sur le bonhomme qu'il aura sélectionné à chaque boucle. Du coup les 20 chapeaux, à la fin de la boucle générale d'évènement se retrouveront sur le dernier bonhomme crée ! C'est normal ! car le fonctionnement d'MMF est logique

Nous allons donc associer et repositionné manuellement chaque chapeau sur chaque bonhomme.

Le principe est le suivant :

- On va créer par exemple en appuyant sur espace un bonhomme ET un chapeau à des positions aléatoire. Dans CE MEME évènement, nous allons attribuer dans la variable A du chapeau, la valeur fixe de notre bonhomme (cette valeur est la seule qui soit forcement différente d'un bonhomme à un autre, malheureusement elle est aléatoire)

-> Ici si on créer un 2ème bonhomme avec son chapeau, l'action mettre la variable A à fixed(bonhomme) ne sera exécuté que pour les objets bonhomme et chapeau créer dans cet évènement car MMF sélectionne automatiquement et UNIQUEMENT les objets qui ont été créer puisque l'action créer objet permet ça. Si on crée 2 chapeau, ils n'auront donc pas tout les deux la valeur fixe du même bonhomme.

- Chaque chapeau contient donc la valeur du bonhomme auquel il est associé. Nous allons donc lancer la fonction spread value 0 dans la variable A du bonhomme, qui aura pour effet de numéroter de 0 à xbonhomme tout nos bonhommes. Nous avons donc une liste de tout nos bonhommes qui se suivent.

- Enfin, dans un always, on va parcourir nos bonhommes avec une fastloop pour qu'Ă  chaque boucle, nous mettions la position du bon chapeau sur le bon bonhomme :

Toujours -> Démarrer la boucle ("boucle") "Nbonhomme" fois

Variable A de bonhomme == index de la loop (ici on sélectionne le bon bonhomme)
+
variable A de chapeau == fixed(bonhomme) (Ici on sélectionne le bon chapeau

Alors

Mettre position chapeau Ă  position bonhomme

Avec cette fonction, c'est imparable, vous avez sélectionné le bon chapeau et le bon bonhomme ! Il ne vous reste plus qu'à tester au moment où vous détruisez le bonhomme, de bien détruire le chapeau qui a la même valeur A que le fixe du bonhomme qui n'a plus de vie

Astuce :

Dans mon jeu Space wars, j'ai parfois besoin de sélectionner mon unité plusieurs fois pour effectuer une action sur CETTE unité. Or, la condition Variable A de unité == index de la loop répétée plusieurs fois demande, je ne sais pas pourquoi, un léger temps d'accès. Si mon jeu teste 20 fois cette condition pour mes 50 unités, alors on se retrouve avec (20*50) 1000 fois où la condition est testé et si c'est dans un always, il faut la tester 60 fois par seconde, soit un total de 60 000 fois ! ! ! !

Donc j'ai opté pour une autre solution, je ne teste ma condition qu'une seule fois pour sélectionner ma bonne unité, et je lui met un flag à ON.

Je n'aurais plus qu'à tester ce flag pour savoir quelle unité est sélectionnée et de mettre après toutes mes conditions un évènement :

- Si boucle + flag Ă  ON alors remettre le flag Ă  OFF

Donc lors de la prochaine boucle, on sélectionnera une autre unité, celle ci n'ayant plus de flag à ON.

Voilà la fin de cet article un peu plus long que les autres et un peu plus difficile à comprendre que les autres (Et on en est qu'au tout début )

Format imprimable Envoyer cet article ŕ un ami Créer un fichier PDF ŕ partir de cet article
Les commentaires appartiennent à leurs auteurs. Nous ne sommes pas responsables de leur contenu.
Auteur Conversation
Samuel
Posté le: 06/04/2012 11:16  Mis à jour: 06/04/2012 11:16
Régulier
Inscrit le: 06/04/2012
De:
Envois: 66
 Elizabeth
cheap evening dresses cheap evening dresses More Topshop Who are the celebs with the style you crave? Let me know, and maybe I can help! Dog is optional Bio: Audrey McClelland Audrey left the fashion world of Donna Karan International in NYC to raise her brood of boys (4 of them, 5 and under) in her home state of Rhode Island. Shea? wedding bridesmaid dresses wedding bridesmaid dresses white prom dresses white prom dresses ?s learned that you can take the girl out of the Fashion District, but you cana??t take the Fashion District out of the girl. pink bridal dresses pink bridal dresses Audrey shares her fashion expertise and mom experience on Mom Generations and, wedding party gowns wedding party gowns now, on zulily! Audrey McClelland's web site This entry was posted in Style, Tips and Tricks, Voices and tagged celeb style, celebrity, copy, heidi klum, heidi klum style, style. Bookmark the permalink. Sarah Jessica Parker (a.k sleeveless cocktail dresses sleeveless cocktail dresses .a. Carrie Bradshaw) is the true mom fashionista! Sex and the City defined a decade Open in new window cheap evening dresses cheap evening dresses
Samuel
Posté le: 13/04/2012 02:35  Mis à jour: 13/04/2012 02:35
Régulier
Inscrit le: 06/04/2012
De:
Envois: 66
 Adam
green bridesmaid dress green bridesmaid dress demonstrates our determination. We discover a goal woman tea length vintage dresses tea length vintage dresses , the correct focus on woman, and we look at from afar plus cocktail dresses plus cocktail dresses . Waiting around for that proper moment… to shoot. cheap beach dresses cheap beach dresses Only by means of the best determined actions to we strike the goal, we have now but a person shot in advance of they know these are getting aimed toward and just take go over if we skip. Yea that basically would not sum up my romantic relationship heritage with ladies, Open in new window but however I'm not French or Swiss jacket evening dresses jacket evening dresses . The observe remains seriously awesome however! Curiously sufficient, Ruchonnet himself was an exact Sniper from the army. He is had a lot of time with Sniper rifles to actually get to understand then.Mr white evening dresses white evening dresses . Ruchonnet is really an incredibly renowned look at designer getting guiding loads of well-known versions. Just Google the man and you will be amazed. mother of the bride cheap dresses mother of the bride cheap dresses Nicely he and some other people I



Sujets d'articles


- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Articles récents


- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Musiques de Sky invader


- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Liens


- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Connexion

Identifiant :

Mot de passe :

Se souvenir de moi



Mot de passe perdu ?
Inscrivez-vous !

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Rejoins mon réseau


- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -