Accueil Articles Tutoriels Forums
2.1 - Création dynamique d'objets
Créé par eagle4 le 25 Juin 2008 à 13:27
2.1 - Création dynamique d'objet


Introduction :

Bonjour à tous pour ce nouveau tutoriel consacré cette fois à une fonction un peu plus compliquée que tout ce que nous avons pu voir jusqu'à présent. Attention, il est nettement recommandé de bien avoir saisi tout les tutoriels de la partie 1 avant de s'attaquer à cette nouvelle partie.

Nous verrons ici comment nous pouvons créer des objets dynamiquement, pendant l'exécution du Runtime. Cette fonction, implémentée dans MMF2, est une fonction de base de tout bon langage de programmation qui permet de créer des objets à la volée.



Principe de fonctionnement :

Dans la plupart des langages, on utilise l'opérateur "new" pour demander un nouvel objet. Sous MMF2, on utilisera l'objet "création de nouveaux objets" qui possède l'unique action "créer un objet"

Image



En réalité, on ne créer pas un nouvel objet mais plutôt une nouvelle instance d'un objet existant. Comprenez par là que l'on va plutôt dupliquer un objet qui existe déjà plutôt que d'en créer un. Cependant, on peut créer une instance même s'il n'existe plus d'autres instances de cet objet.

Pour prendre un exemple concret, imaginez un jeu où la collision d'une balle de revolver sur une paroi va déclencher une création de plusieurs objets "étincelle". On va alors créer un objet "étincelle" par exemple depuis un actif qui possédera toutes les animations et événements pour gérer l'étincelle. En créant plusieurs étincelles ayant différentes valeurs d'initialisation, on va ainsi créer un effet réaliste d'étincelles générées lors d'un impact de balle.



Et plus en détail :

Comment MMF2 fait il pour gérer la création de centaines d'objets en même temps, puis de milliers d'objets lors d'une seule partie ? Eh bien la réponse est simple, il s'agit là d'une gestion avancée de la mémoire.

Lors de la création d'un objet, MMF2 va réserver une certaine place sur la mémoire vive de l'ordinateur qui correspond aux différentes variables de l'objet. Il le fait de manière "intelligente". Par exemple, les images contenues dans l'animation d'un objet ne sont mis en mémoire qu'une seule fois, puisque l'ordre des images de deux objets du même type peuvent changer, mais pas les images elles même. Par contre les "valeurs modifiables" de deux objets du même types seront répétées deux fois car elles sont uniques d'un objets à l'autre. Les variables que l'on ne contrôle pas directement sont également différenciées, telles que les positions en x et en y.

Nous pouvons avoir alors plusieurs ennemis qui n'ont pas forcement la même vitesse et/ou la même séquence d'animation au même moment, ni même les mêmes positions en X et en Y. Et donc qui peuvent avoir des mouvements et de réactions différentes à un même problème (collisions etc) puisqu'ils n'ont pas les mêmes variables.

Il existe une variable unique permettant de différencier les objets de même type qui ont été instanciés dynamiquement, il s'agit de la "valeur fixe". Cette valeur, que vous pouvez également rentrer manuellement si la génération automatique de la valeur ne vous convient pas, vous permettra de différencier vos objets lors des conditions.



Avantages :

L'avantage de cette technique, c'est que l'on peut créer des des dizaines d'objets pour les détruire ensuite. Cela peut être particulièrement astucieux pour des système de particules.

Un autre avantage est aussi la gestion groupée automatiquement du code de ces objets. En effet, un seul événement de collisions permet à toutes les instances de pouvoir être gérées par cette collision.



Inconvénients :

Attention toutefois à faire une code qui soit bien conçu ne permettant pas d'aller au delà des 10 000 objets par scène de peur de voir son application considérablement ralentie par une mémoire surchargée.

Image


La création de gros objets graphiques peut vite faire chuter le FPS



Conclusion:

La création dynamique, une fois qu'on y a gouté, on ne la lâche plus ^^, elle nous permet tout les effets graphiques dont on a rêvé, création d'étincelles, de fumée, des débris d'explosion, des flammes, de l'eau etc etc etc... Mais un minimum de connaissance de la programmation est nécessaire pour ne pas mettre à genoux les plus puissants des ordinateurs dernière générations :wink: .