Message #1884
Sujet: Présentation de la bibliothèque AGE
| Type | Date | Auteur | Contenu |
|---|---|---|---|
| Dernière modification | 27-03-2007 21:37:35 | Agar |
Je ne savais pas trop où poster ça. Vu que c'est un projet sur lequel je bosse et qu'il est presque terminé (les 3/4 du code sont bouclés et ça devrait être fini d'ici un mois), j'ai opté pour la section "projets terminés". Je m'excuse d'avance pour la publicité mensongère.
Voici donc mon projet: AGE. AGE, pour Adaptable Game Engine. Introduction AGE est une bibliothèque DLL écrite en C# permettant la création de toutes formes de jeux/applications multimédia. Elle utilise IrrlichtNETCP pour la vidéo, Bass.NET (pas IrrKlang, qui n'offre pas assez de possibilités) pour le son et ODE.NET pour la physique. L'utilisation du moteur est simple : il suffit de créer une instance de la classe AGEEngine (imaginez-la comme une sorte de IrrlichtDevice, la mère de tout le reste). Ensuite, cette classe a pour principale fonction de créer des entités via les diverses méthodes AddEntity(). 1- Le concept d'entité C'est quoi donc, une entité? En fait, tout élément du monde de AGE dérive de la classe abstraite AGEEntity. L'idée est de faire en sorte que cet objet soit la SEULE chose dont vous ayez besoin pour ajouter un élément à votre jeu. Vous voulez lui faire émettre un son? Pas de problème, le moteur gérera la stéréo et le volume automatiquement en fonction de sa position relative à la caméra. Vous préférez qu'il émettre un vrombissement permanent ? Très bien, AGE s'occupe de tout: quand l'entité passera à côté de vous, le volume et la stéréo évolueront automatiquement. Oui, l'effet Doppler est géré. De la même façon, plus besoin de se prendre la tête à "lier" l'objet du moteur physique à l'objet du moteur vidéo. Une entité a un modèle 3D (ou autre chose d'ailleurs, ça peut être un skydome, une fontaine de particules, un billboard, etc...), c'est un fait, mais elle a aussi une masse, une vitesse, etc... En gros c'est un « objet » complet, comme dans le monde réel. Quand je me casse la gueule de ma chaise, il n'y a pas mon modèle 3D d'un côté, ma physique de l'autre et un informaticien derrière qui se bagarre pour lier les deux : pourquoi cela devrait-il être différent dans un moteur de jeu ? Mais le concept d'entité va plus loin : au delà du moteur de jeu, l'entité est donc supposée être un "objet" du monde. Pourquoi alors faudrait-il stocker ailleurs les éléments qui ne relèvent pas du moteur mais du gameplay ? La classe AGEEntity contient donc une sorte de hashtable (pour ceux qui ne connaissent pas, c'est un tableau qui lie une clé -ici une string- à une valeur) baptisée Properties. Vous voulez que votre entité ait des points de vie? Ajoutez une valeur health de type integer à ses propriétés. Pour y accéder, vous n'aurez qu'à faire MyAGEEntity.Property[health]. Une propriété peut être de n'importe quel type (même une autre entité ou une autre table de propriétés, mais là bon courage), et peut aussi être un tableau. Maintenant, si vous voulez que votre entité reste tranquille à regarder les étoiles scintiller dans la skybox au dessus de sa tête, vous pouvez le faire. Mais si vous voulez qu'elle ait un comportement un peu plus dynamique, rien de plus simple. Tout se fait via des events et des delegates. Par exemple, l'évènement OnEachFrame est appelé 10 fois par seconde. Ecrivez une petite méthode d'intelligence artificielle, et hop, en une ligne de code (MyAGEEntity.OnEachFrame += MyAIRoutine()) vous pouvez l'assigner à toutes les entités qui doivent l'utiliser. D'autres évènements seront prévus pour tout ce qui peut se produire (clic sur l'entité, collisions, proximité, etc...) En résumé : avant, un personnage c'était un node Irrlicht + un Geom ODE + tout un machin truc pour le son + une classe en plus qui gérait son comportement. Maintenant, c'est une entité AGE. 2- Autres fonctionnalités En plus de cela, AGE contient (pour l'instant, ça va s'alourdir avec le temps) :
3- L'espace AGE.Library AGE contient également, dans le namespace AGE.Library, toute une batterie de classes "gadgets" qui peuvent servir pour divers types de jeux, entre autre (il y en a beaucoup) :
4- Et maintenant ? Et bien voilà... J'attends vos suggestions, vos conseils, vos critiques... Pensez-vous que tout ce projet est une bonne idée ou pas ? Qu'aimeriez vous y voir de plus ? Tenez-moi informé, j'en ferai de même d'ici un mois environ, quand la version 0.1 de AGE sera mise en ligne. Je rechercherai alors des gens pour m'aider à écrire une API, tester tout ça à fond et m'aider à réaliser le plus vite possible une version totalement crossplatform (certains morceaux du code de la version actuelle, comme ceux utilisés pour le moment pour le son et le joystick sont windows only). Voilà voilà. Merci d'avoir lu jusqu'ici ! |
| Création du message | 27-03-2007 21:27:23 | Agar |
Je ne savais pas trop où poster ça. Vu que c'est un projet sur lequel je bosse et qu'il est presque terminé (les 3/4 du code sont bouclés et ça devrait être fini d'ici un mois), j'ai opté pour la section "projets terminés". Je m'excuse d'avance pour la publicité mensongère.
Voici donc mon projet: AGE. AGE, pour Adaptable Game Engine. Introduction AGE est une bibliothèque DLL écrite en C# permettant la création de toutes formes de jeux/applications multimédia. Elle utilise IrrlichtNETCP pour la vidéo, Bass.NET (pas IrrKlang, qui n'offre pas assez de possibilités) pour le son et ODE.NET pour la physique. L'utilisation du moteur est simple : il suffit de créer une instance de la classe AGEEngine (imaginez-la comme une sorte de IrrlichtDevice, la mère de tout le reste). Ensuite, cette classe a pour principale fonction de créer des entités via les diverses méthodes AddEntity(). 1- Le concept d'entité C'est quoi donc, une entité? En fait, tout élément du monde de AGE dérive de la classe abstraite AGEEntity. L'idée est de faire en sorte que cet objet soit la SEULE chose dont vous ayez besoin pour ajouter un élément à votre jeu. Vous voulez lui faire émettre un son? Pas de problème, le moteur gérera la stéréo et le volume automatiquement en fonction de sa position relative à la caméra. Vous préférez qu'il émettre un vrombissement permanent ? Très bien, AGE s'occupe de tout: quand l'entité passera à côté de vous, le volume et la stéréo évolueront automatiquement. Oui, l'effet Doppler est géré. De la même façon, plus besoin de se prendre la tête à "lier" l'objet du moteur physique à l'objet du moteur vidéo. Une entité a un modèle 3D (ou autre chose d'ailleurs, ça peut être un skydome, une fontaine de particules, un billboard, etc...), c'est un fait, mais elle a aussi une masse, une vitesse, etc... En gros c'est un « objet » complet, comme dans le monde réel. Quand je me casse la gueule de ma chaise, il n'y a pas mon modèle 3D d'un côté, ma physique de l'autre et un informaticien derrière qui se bagarre pour lier les deux : pourquoi cela devrait-il être différent dans un moteur de jeu ? Mais le concept d'entité va plus loin : au delà du moteur de jeu, l'entité est donc supposée être un "objet" du monde. Pourquoi alors faudrait-il stocker ailleurs les éléments qui ne relèvent pas du moteur mais du gameplay ? La classe AGEEntity contient donc une sorte de hashtable (pour ceux qui ne connaissent pas, c'est un tableau qui lie une clé -ici une string- à une valeur) baptisée Properties. Vous voulez que votre entité ait des points de vie? Ajoutez une valeur health de type integer à ses propriétés. Pour y accéder, vous n'aurez qu'à faire MyAGEEntity.Property[health]. Une propriété peut être de n'importe quel type (même une autre entité ou une autre table de propriétés, mais là bon courage), et peut aussi être un tableau. Maintenant, si vous voulez que votre entité reste tranquille à regarder les étoiles scintiller dans la skybox au dessus de sa tête, vous pouvez le faire. Mais si vous voulez qu'elle ait un comportement un peu plus dynamique, rien de plus simple. Tout se fait via des events et des delegates. Par exemple, l'évènement OnEachFrame est appelé 10 fois par seconde. Ecrivez une petite méthode d'intelligence artificielle, et hop, en une ligne de code (MyAGEEntity.OnEachFrame += MyAIRoutine()) vous pouvez l'assigner à toutes les entités qui doivent l'utiliser. D'autres évènements seront prévus pour tout ce qui peut se produire (clic sur l'entité, collisions, proximité, etc...) En résumé : avant, un personnage c'était un node Irrlicht + un Geom ODE + tout un machin truc pour le son + une classe en plus qui gérait son comportement. Maintenant, c'est une entité AGE. 2- Autres fonctionnalités En plus de cela, AGE contient (pour l'instant, ça va s'alourdir avec le temps) :
3- L'espace AGE.Library AGE contient également, dans le namespace AGE.Library, toute une batterie de classes "gadgets" qui peuvent servir pour divers types de jeux, entre autre (il y en a beaucoup) :
4- Et maintenant ? Et bien voilà... J'attends vos suggestions, vos conseils, vos critiques... Pensez-vous que tout ce projet est une bonne idée ou pas ? Qu'aimeriez vous y voir de plus ? Tenez-moi informé, j'en ferai de même d'ici un mois environ, quand la version 0.1 de AGE sera mise en ligne. Je rechercherai alors des gens pour m'aider à écrire une API, tester tout ça à fond et m'aider à réaliser le plus vite possible une version totalement crossplatform (certains morceaux du code de la version actuelle, comme ceux utilisés pour le moment pour le son et le joystick sont windows only). Voilà voilà. Merci d'avoir lu jusqu'ici ! |
| Options | Liens officiels | Caractéristiques | Statistiques | Communauté |
|---|---|---|---|---|
|
Préférences cookies Corrections |
![]() ![]() ![]() ![]() |
Propulsé par Django xhtml 1.0 css 2.1 |
884 membres 1440 sujets 11337 messages |
Dernier membre inscrit: Saidov17 193 invités en ligne membre en ligne: - RSS Feed |