| Module Jeu de Plateforme | |
|
|
|
Auteur | Message |
---|
Kitai Délégué de la tasse bleue
Nombre de messages : 2907
Date d'inscription : 01/08/2006
| Sujet: Module Jeu de Plateforme Dim 21 Aoû 2011 - 15:55 | |
| Coucou ! Je reviens avec un nouveau module de jeu de plateforme ! Cette fois, il a été conçu sous AGS 3.2.1 et il est censé être moins buggé que le précédent. L'utilisation est simplissime : importez le module (fichier .scm) dans AGS (clic droit sur l'onglet Scripts puis " Import new script...") et ça y est, toutes vos pièces sont devenues des niveaux de jeu de plateforme ! Utilisez les régions pour dessiner les sols, murs, plafonds... (les obstacles en fait) et le moteur se charge du reste. Le tout est bien sûr personnalisable à l'envie (enfin, presque ! ), je vous laisse découvrir ça par vous-même en explorant la démonstration technique du module. Voici le contenu du fichier LisezMoi pour ceux qui voudraient lire avant d'éventuellement télécharger : - Spoiler:
- Code:
-
######## MODULE DE PLATEFORME - VERSION 1.0beta ############# ####### Auteur : Kitai ############ #### ##### # Développé sous AGS 3.2.1 #
Plan de ce fichier : 1. Description 2. Liste des variables et fonctions publiques du module 3. Changements apportés depuis la version précédente 4. Manuel d'utilisation # Importation et installation minimale du module # Utilisation pour certaines pièces uniquement # Utilisation pour certains personnages uniquement # Personnalisation des paramètres # Solidité des personnages et des objets # Gestion des rencontres des personnages et des objets
1. Description :
Ce module est un moteur de plateforme. Il a été développé pour permettre de réaliser simplement des jeux de plateforme 2D basiques avec Adventure Game Studio. Le principe est simple : les "Regions" d'AGS représentent les sols/murs/plafond (parties solides) de la pièce et le moteur se charge de placer et déplacer automatiquement les personnages.
2. Liste des variables et fonctions publiques du module :
. struct Plateforme . struct Plateforme_Regions . Plateforme PF_Persos[] . Plateforme_Regions PF_Regions[16] . function PF_GetNumber(Character* this) . enum PF_Axe . #define PF_PROP_PIECES . #define PF_PROP_PERSOS . #define PF_NB_PERSOS . #define PF_ACCELERATION . #define PF_RESISTANCE_X . #define PF_VITESSE_LIMITE_X . #define PF_VITESSE_LIMITE_Y . #define PF_FORCE_GRAVITE . #define PF_FORCE_SAUT . #define PF_TOUCHE_GAUCHE . #define PF_TOUCHE_DROITE . #define PF_TOUCHE_SAUT
3. Changements apportés depuis la version précédente (1.0alpha) . Ajout d'une fonction Plateforme::Marche pour que l'utilisateur puisse gérer les PNJs . Ajout des propriétés blockupward/downward/lefttoright/ righttoleft à Plateforme_Regions . Révision de la fonction Plateforme::Scrute > évite les bugs de placemnt . Révision de la gestion de l'inclinaison . Révision de la gestion de levée de pied : le nombre de pixels est désormais relatif à la hauteur définie pour le personnage
4. Manuel d'utilisation
# Importation et installation minimale du module :
Pour importer le module, faites un clic droit sur l'onglet "Scripts" d'AGS et choisissez "Import script..." puis sélectionnez le fichier "Plateforme_1.0_beta.scm". Ensuite, vous devez déclarer le nombre de personnages qui seront concernés par le moteur en modifiant le nombre de indiqué dans la ligne "#define PF_NB_PERSOS 1". Si vous voulez rendre les choses simples, donnez la valeur correspondant au nombre total de personnages dans votre projet.
# Utilisation pour certaines pièces uniquement :
Une fois le module importé, il s'applique par défaut à toutes les pièces de votre jeu. Si vous voulez qu'il ne s'applique qu'à certaines pièces en particulier, vous devez créer une propriété booléenne "Plateforme" qui concerne les pièces. Pour cela, éditez une pièce et allez dans ses réglages (par défaut en bas à droite de l'éditeur) et cliquez sur la ligne "Properties". La fenêtre des propriétés s'ouvre. Cliquez sur "Edit schema..." pour ouvrir une nouvelle fenêtre dans laquelle vous effectuez un clic droit pour choisir "Add new property...". Mettez alors "Plateforme" dans le champ "Name" et choisissez le type "Boolean". Donnez 0 comme "Default value". Fermez les fenêtres de façon à revenir sur la fenêtre principale d'édition de la pièce puis recliquez sur "Properties". La nouvelle propriété apparaît. Choisissez la valeur "True" si vous voulez que le module s'applique pour cette pièce, laissez "False" sinon. Cliquez ensuite sur "Plateforme.ash" sous l'onglet "Scripts" et mettez "true" à la place de "false" à la ligne 6 : "#define PF_PROP_PIECES false".
# Utilisation pour certains personnages uniquement :
Editez un personnage de votre jeu (n'importe lequel) et allez dans ses réglages (par défaut en bas à droite de l'éditeur) et cliquez sur la ligne "Properties". La fenêtre des propriétés s'ouvre. Cliquez sur "Edit schema..." pour ouvrir une nouvelle fenêtre dans laquelle vous effectuez un clic droit pour choisir "Add new property...". Mettez alors "Plateforme" dans le champ "Name" et choisissez le type "Boolean". Donnez 0 comme "Default value". Fermez les fenêtres de façon à revenir sur la fenêtre principale d'édition du personnage puis recliquez sur "Properties". La nouvelle propriété apparaît. Choisissez la valeur "True" si vous voulez que le module s'applique pour ce personnage, laissez "False" sinon. Cliquez ensuite sur "Plateforme.ash" sous l'onglet "Scripts" et mettez "true" à la place de "false" à la ligne 10 : "#define PF_PROP_PERSOS false".
# Personnalisation des paramètres : Une liste de valeurs par défaut est définie en haut du fichier d'en-tête "Plateforme.ash". Selon la valeur que vous leur donnerez, le moteur se comportera de façon sensiblement différente. Pour donner des valeurs spécifiques à certains personnages vous pouvez placer du code dans la fonction "game_start" de votre script global ou dans les fonctions associées à l'événement "Player enters room (before fade-in)". Voici un exemple de code que vous pouvez placer dans ces fonctions : // On récupère l'ID de référencement de cSuperman int id = cSuperman.PF_GetNumber(); // Si le personnage est bien référencé (sûreté) if (id > -1) // La gravité ne l'affecte pas PF_Persos[id].gravite = 0.0;
Vous pouvez également personnaliser les régions grâce au tableau PF_Regions. Vous pouvez définir pour chaque région si elle doit freiner le personnage (propriété "solid") et quel est son taux de résistance aux déplacements. Par défaut toutes les régions exceptée la région 0 sont solides et ont un taux de résistance de PF_RESISTANCE_X. Voici un exemple de code : // La région 2 ne fera pas obstacle au personnage PF_Regions[region[2].ID].solid = false; // La région 3 fera beaucoup glisser (givre) PF_Regions[region[3].ID].resistance = 0.01;
# Solidité des personnages et des objets : La propriété "Solid" qu'AGS attribue aux personnages et aux objets est utilisée par le moteur plateforme pour déterminer si le personnage/objet représente ou non un obstacle sur le chemin du personnage. Pour rendre un objet ou un personnage "traversable", vous pouvez faire comme suit :
oNuage.Solid = false; cOmbre.Solid = false;
# Gestion des rencontres personnages/objets
Vous trouverez dans le corps du module "Plateforme.asc" une fonction "Touche_Personnage" et une fonction "Touche_Objet", qui sont appelées chaque fois qu'un personnage en rencontre un autre ou touche un objet. Vous pouvez y placer du code pour gérer ce qui se passe lorsqu'un tel événement survient. Cette fonction est locale au module, vous ne pouvez donc pas y utiliser de variable d'objet comme "oSeau" ou autre, mais vous pouvez utiliser le tableau object[]. Une astuce pour gérer ces rencontres dans le script de la pièce consiste à utiliser des variables globales dont vous modifiez la valeur dans la fonction "Touche_*" du module et que vous vérifiez dans la fonction Rep_Exec() de la pièce. En voici un exemple succinct :
// Dans "Plateforme.asc" : bool Plateforme::Touche_Objet(Object* objet) { // On change la variable globale // qu'on a définie par défaut à -1 Objet_Touche = objet.ID;
// Suite du code...
// Dans le script de la pièce function room_RepExec() { // Si l'objet touché est le seau if (Objet_Touche == oSeau.ID)
// S'il n'est pas encore tombé if (oSeau.View != SEAU_TOMBE) { player.Say("Oups !"); oSeau.SetView(SEAU_TOMBE); }
// On réinitialise la variable à chaque // cycle Objet_Touche = -1;
}
Enjoy it ! PS : J'attends vos retours pour corriger d'éventuels bugs et n'hésitez pas à me proposer des améliorations._________________ Ga is Ga Vous pouvez consulter l' aide d'AGS 3.2 en français et contribuer à la traduction et à l'amélioration si le cœur vous en dit !
Dernière édition par Kitai le Lun 9 Nov 2015 - 21:44, édité 7 fois |
|
| |
Godzillu Grand Cliqueur Royal
Nombre de messages : 1658
Date d'inscription : 11/03/2007
| Sujet: Re: Module Jeu de Plateforme Dim 21 Aoû 2011 - 15:57 | |
| Excellent merci beaucoup. J'en ai rêvé Kitai l'a fait. Je teste ça ce soir. |
|
| |
Kitai Délégué de la tasse bleue
Nombre de messages : 2907
Date d'inscription : 01/08/2006
| Sujet: Re: Module Jeu de Plateforme Jeu 25 Aoû 2011 - 17:13 | |
| J'ai mis à jour la version bêta du module (voir le premier message). Les changements sont listés dans le fichier LisezMoi qui vient avec. Voilà une démonstration technique du module. J'ai essayé de reproduire en partie un des deux premiers niveaux de Super Mario World (SNES). Le résultat n'est bien sûr pas parfait mais j'en suis tout de même assez satisfait. Les touches sont les suivantes : Flèche gauche = déplacement vers la gauche Flèche droite = déplacement vers la droite Touche espace = saut (maintenez pour sauter plus haut et plus longtemps) Touche Ctrl gauche = maintenez pour passer à la vitesse supérieure En ce qui concerne le module en lui-même, j'ai simplement ajusté les définitions globales et ajouté une toute petite assignation de variables globales dans les fonctions Touche_Personnage et Touche_Objet. A part ça, ce projet utilise le module version 1.0 bêta tel quel. Le reste du code se trouve dans le script de la pièce 4. Il peut paraître un peu barbare à première vue, mais c'est qu'il y a pas mal de répétitions dans les initialisations, et mine de rien Super Mario World a beaucoup de particularités dans son moteur. Malgré tout je pense que c'est encore une fois assez simple à comprendre, au moins dans les grandes lignes. De plus j'ai commenté une bonne partie du code. Enfin, je rappelle que ce module n'est pas exclusivement consacré à faire des Mario-like, même si c'est ma principale source d'inspiration. Il est surtout développé pour faire des phases de plateforme simples dans un jeu AGS. Après c'est à vous d'en faire l'utilisation que vous voulez ! N'hésitez pas à me donner des retours _________________ Ga is Ga Vous pouvez consulter l' aide d'AGS 3.2 en français et contribuer à la traduction et à l'amélioration si le cœur vous en dit !
Dernière édition par Kitai le Dim 4 Sep 2011 - 17:33, édité 1 fois |
|
| |
Creamy Disciple de la Grande Tasse Bleue
Nombre de messages : 1266
Date d'inscription : 15/10/2007
| Sujet: Re: Module Jeu de Plateforme Mar 30 Aoû 2011 - 22:43 | |
| C'est le meilleur jeu de plate-forme auquel j'ai pu jouer sur AGS.
On est loin de la rigidité du jeu "1213" de Yathzee, par exemple.
|
|
| |
-a-timburton-a- Cliqueur Emérite
Nombre de messages : 588
Date d'inscription : 17/05/2010
| Sujet: Re: Module Jeu de Plateforme Ven 9 Sep 2011 - 20:14 | |
| Incroyable. C'est Simple d'utilisation (pour faire vraiment un jeu basique), mais il y a de grandes possibilités. J'aimerais savoir notamment si je peux faire des arrières plans, j'ai réussi à donner avec la fonction "Solid" la sensation d'être entre une allée d'arbres, mais j'aimerais que l'on ait la sensation que la caméra face aussi passer en genre "système de calques" les éléments en arrière plans. Donc j'aimerais savoir si je peux faire plusieurs arrière plans superposés: Un angle de vue comme sur le jeu Limbo en gros (j'ai pas trouvé mieux comme exemple): https://www.youtube.com/watch?v=Y4HSyVXKYz8 |
|
| |
Godzillu Grand Cliqueur Royal
Nombre de messages : 1658
Date d'inscription : 11/03/2007
| Sujet: Re: Module Jeu de Plateforme Ven 9 Sep 2011 - 20:54 | |
| Il existe un module qui gère les parallaxes sur le site officiel : MODULE: Smooth Scrolling & Simple ParallaxIl rajoute des trucs sympas genre un défilement fluide pour les rooms dépassant la taille de ta view. Shai-la l'a utilisé sur sa démo de Dread Mac Farlane : Page où se trouve le jeu si tu veux avoir une idée des fonctionnalités. |
|
| |
-a-timburton-a- Cliqueur Emérite
Nombre de messages : 588
Date d'inscription : 17/05/2010
| Sujet: Re: Module Jeu de Plateforme Sam 10 Sep 2011 - 9:00 | |
| |
|
| |
Kitai Délégué de la tasse bleue
Nombre de messages : 2907
Date d'inscription : 01/08/2006
| Sujet: Re: Module Jeu de Plateforme Sam 10 Sep 2011 - 9:54 | |
| - -a-timburton-a- a écrit:
- Incroyable.
C'est Simple d'utilisation (pour faire vraiment un jeu basique), mais il y a de grandes possibilités. Heureux que ça plaise et que tu trouves vraiment ça simple d'utilisation ! - -a-timburton-a- a écrit:
- J'aimerais savoir notamment si je peux faire des arrières plans, j'ai réussi à donner avec la fonction "Solid" la sensation d'être entre une allée d'arbres, mais j'aimerais que l'on ait la sensation que la caméra face aussi passer en genre "système de calques" les éléments en arrière plans.
Donc j'aimerais savoir si je peux faire plusieurs arrière plans superposés:
Un angle de vue comme sur le jeu Limbo en gros (j'ai pas trouvé mieux comme exemple): https://www.youtube.com/watch?v=Y4HSyVXKYz8 En fait il y a aussi cet effet dans Super Mario World, mais comme l'a dit Godzillu, il existe un module pour gérer ça. J'espère juste que le cumul va pas donner un moteur qui bouffe trop de ressource. En tout cas j'connaissais pas Limbo, j'essayerai ça quand j'pourrai parce que ça a l'air vraiment sympa. Voilà, profitez bien et hésitez pas à me suggérer des corrections/améliorations ! _________________ Ga is Ga Vous pouvez consulter l' aide d'AGS 3.2 en français et contribuer à la traduction et à l'amélioration si le cœur vous en dit ! |
|
| |
-a-timburton-a- Cliqueur Emérite
Nombre de messages : 588
Date d'inscription : 17/05/2010
| Sujet: Re: Module Jeu de Plateforme Dim 11 Sep 2011 - 10:52 | |
| Enfin simple, si tu veux juste faire un jeu où il faut sauter Limbo à l'air naïf vu comme ça, mais ta carte Graphique doit gérer le pixel shader 3 minimum. Corrections, je n'ai pas trop bidouillé le logiciel, mais chauffe un peu ta voix quand tu chante (j'ai trouvé l'easter egg!) dans mario. Je vais essayer de me faire un petit truc simple. |
|
| |
Kitai Délégué de la tasse bleue
Nombre de messages : 2907
Date d'inscription : 01/08/2006
| Sujet: Re: Module Jeu de Plateforme Dim 11 Sep 2011 - 19:22 | |
| - -a-timburton-a- a écrit:
- Enfin simple, si tu veux juste faire un jeu où il faut sauter
C'est l'principe de base d'un jeu de plateforme Après tu peux aussi gérer assez simplement les collisions joueur/ennemi avec de simples ChangeRoom. - a-timburton-a- a écrit:
- Corrections, je n'ai pas trop bidouillé le logiciel, mais chauffe un peu ta voix quand tu chante (j'ai trouvé l'easter egg!) dans mario.
Excellent ! J'avais pas vu qu'il restait un fichier .wav dans le dossier, et je sais fichtrement pas ce qu'il a bien pu venir faire là... En tout cas, je pense pas que ça soit le début d'une florissante carrière de chanteur _________________ Ga is Ga Vous pouvez consulter l' aide d'AGS 3.2 en français et contribuer à la traduction et à l'amélioration si le cœur vous en dit ! |
|
| |
MorganG Cliqueur Amateur
Nombre de messages : 201
Date d'inscription : 13/04/2007
| Sujet: Re: Module Jeu de Plateforme Sam 19 Nov 2011 - 11:42 | |
| Salut tout le monde, Vraiment super ce module, par contre je n'arrive pas à comprendre le code pour faire déclencher une action si on touche un objet ou un personnage Si quelqu'un pouvait m'éclairer Merci |
|
| |
Kitai Délégué de la tasse bleue
Nombre de messages : 2907
Date d'inscription : 01/08/2006
| Sujet: Re: Module Jeu de Plateforme Dim 20 Nov 2011 - 12:18 | |
| Salut MorganG. Tout d'abord, je me rends compte que les fichiers sur mediafire ont été supprimés. Donc si tu as la version alpha, tu peux désormais télécharger la version bêta que je viens de re-uploader. (La même chose pour la démonstration technique) - MorganG a écrit:
- par contre je n'arrive pas à comprendre le code pour faire déclencher une action si on touche un objet ou un personnage
Si quelqu'un pouvait m'éclairer L'exemple de la démonstration technique n'est pas idéal. En fait j'aurais aimé que l'utilisateur puisse simplement déclarer une fonction de type PF_Touche_objet/perso dans chaque pièce, où il aurait mis le code qu'il voulait, mais il se trouve que ce n'est pas possible. Donc la meilleure solution, c'est de te rendre dans le script Plateforme.asc et de te placer dans la fonction Plateforme::Touche_Objet ou Plateforme::Touche_Personnage selon ce que tu veux faire. Mettons que ce que tu veux faire, c'est que lorsque le personnage joueur touche un objet oPiece dont l'ID est 0, son score augmente. Tu vas donc dans la fonction Plateforme::Touche_Objet et tu entres le code suivante : - Code:
-
// Si le personnage joueur touche l'objet #0 dans la pièce #1 if ((this.perso == player) && (objet == object[0]) && (player.Room == 1)) { // On ajoute des points au score GiveScore(200); // Et la pièce disparaît object[0].Visible = false; } Ici, je fais disparaître la pièce lorsqu'on la touche. Mais si je n'avais pas fait ça, le code se serait déclenché de façon répétitive jusqu'à ce que le personnage ne soit plus en contact avec l'objet. Il aurait donc fallu gérer ça avec une variable comme cela : - Code:
-
if ((this.perso == player) && (objet == object[0]) && (player.Room == 1)) { if (this.user[0] == 0) GiveScore(200); this.user[0] = 2; } Tout en plaçant cette instruction dans repeatedly_execute : - Code:
-
int id_player = PF_GetNumber(player); if (PF_Persos[id_player].user[0] > 0) PF_Persos[id_player].user[0] -= 1; De cette façon, la première fois que le personnage touche l'objet, la variable étant à 0, le code se déclenche. Puis on donne une valeur de 2 à la variable : ensuite, à chaque cycle on va enlever 1 à la variable, mais tant que le contact se fait, la variable sera ensuite remise à la valeur 2. Ainsi, tant qu'il y a contact, la variable user[0] associée au personnage joueur vaudra 1 ou 2, mais pas 0. L'astuce est un peu complexe à utiliser, mais c'est pour avoir plus de réactivité dans les contacts. Enfin, si tu veux gérer les collisions entre deux personnages (mettons X et Y), sache que la fonction Touche_Personnage est généralement appelée deux fois : une fois avec X comme toucheur et Y comme touché, une deuxième fois avec Y comme toucheur et X comme touché. Ceci en tête, il suffit de bien mettre les conditions nécessaires pour ne pas déclencher le code deux fois (un simple if (this.perso == X) suffit en fait). Je ne sais pas si j'ai été très clair, mais si tu as encore des soucis n'hésite pas à poser des questions. Je verrai si je ne peux pas simplifier la gestion des collisions (en introduisant par exemple des fonctions IsTouchingObject et IsTouchingCharacter pour voir si les personnages se touchent. Peut-être que ce serait plus simple, je ne sais pas.). Bon courage en tout cas ! _________________ Ga is Ga Vous pouvez consulter l' aide d'AGS 3.2 en français et contribuer à la traduction et à l'amélioration si le cœur vous en dit ! |
|
| |
samielatriyahoofr Adepte de la Grande Tasse Bleue
Nombre de messages : 114
Age : 25
Localisation : au coeur d'un jeu de l age d or
Date d'inscription : 21/03/2012
| Sujet: Re: Module Jeu de Plateforme Lun 26 Mar 2012 - 19:41 | |
| merci _________________ |
|
| |
Creamy Disciple de la Grande Tasse Bleue
Nombre de messages : 1266
Date d'inscription : 15/10/2007
| Sujet: Re: Module Jeu de Plateforme Lun 1 Sep 2014 - 22:29 | |
| Bonsoir, j'ai une petite question sur l'utilisation du module :
Comment définir des vitesses différentes pour les persos? Apparemment l'utilisation du module désactive les "walkspeed" et quand on change la valeur #define PF_VITESSE_LIMITE_X , ça affecte tous les persos.
|
|
| |
Kitai Délégué de la tasse bleue
Nombre de messages : 2907
Date d'inscription : 01/08/2006
| Sujet: Re: Module Jeu de Plateforme Mar 2 Sep 2014 - 6:53 | |
| Salut Creamy, Tu as cet exemple dans le fichier LisezMoi : - Code:
-
// On récupère l'ID de référencement de cSuperman int id = cSuperman.PF_GetNumber(); // Si le personnage est bien référencé (sûreté) if (id > -1) // La gravité ne l'affecte pas PF_Persos[id].gravite = 0.0;
Les propriétés qui t'intéressent sont limit_x et possiblement acceleration, que tu modifies comme ça : - Code:
-
// On récupère l'ID de référencement de cSuperman int id = cSuperman.PF_GetNumber(); // Si le personnage est bien référencé (sûreté) if (id > -1) { // Augmentation de l'accélération PF_Persos[id].acceleration = 0.5 + PF_Persos[id].acceleration; // Augmentation de la vitesse limite horizontale PF_Persos[id].limit_x = 1.0 + PF_Persos[id].limit_x; } _________________ Ga is Ga Vous pouvez consulter l' aide d'AGS 3.2 en français et contribuer à la traduction et à l'amélioration si le cœur vous en dit ! |
|
| |
filoulefilou Cliqueur Amateur
Nombre de messages : 359
Date d'inscription : 24/05/2010
| Sujet: Re: Module Jeu de Plateforme Mar 20 Oct 2015 - 20:50 | |
| Je viens de télécharger ce module et j'ai tenter de comprendre deux trois petites choses... J'aimerais bien que tu m'expliques plusieurs choses.
Déjà comment tu as fait pour bloquer les régions ?
Mais surtout, comment tu as fait pour les déplacements ? Comment tu as calculé la vitesse ?
Et pour les sauts ? |
|
| |
Kitai Délégué de la tasse bleue
Nombre de messages : 2907
Date d'inscription : 01/08/2006
| Sujet: Re: Module Jeu de Plateforme Mar 20 Oct 2015 - 21:42 | |
| Salut filoulefilou, heureux d'apprendre que tu renouvelles l'expérience d'utiliser mon module de plateforme ! Je n'ai pas le temps de répondre à ces questions pour le moments, mais je fais ça dès que je peux _________________ Ga is Ga Vous pouvez consulter l' aide d'AGS 3.2 en français et contribuer à la traduction et à l'amélioration si le cœur vous en dit ! |
|
| |
filoulefilou Cliqueur Amateur
Nombre de messages : 359
Date d'inscription : 24/05/2010
| Sujet: Re: Module Jeu de Plateforme Mar 20 Oct 2015 - 22:19 | |
| Ouais, j'apprends bcp en m'exerçant Et là, je tente de faire un moteur plateforme proto avec déplacement, saut, obstacle, boule de feu ..etc
|
|
| |
Kitai Délégué de la tasse bleue
Nombre de messages : 2907
Date d'inscription : 01/08/2006
| Sujet: Re: Module Jeu de Plateforme Jeu 29 Oct 2015 - 17:59 | |
| Ah je viens de comprendre que tes questions portent sur le code du moteur, et pas sur l'utilisation du module. Je sais pas si tu as vu, mais l'essentiel du moteur physique se passe dans la fonction Plateforme::Update(). Celle-ci est appelée à chaque cycle de jeu sur chaque personnage et se charge de calculer leur nouvel emplacement. - filoulefilou a écrit:
- Déjà comment tu as fait pour bloquer les régions ?
J'imagine que tu veux savoir comment le moteur les interprète comme des régions "dures", du sol, tout ça. En fait à chaque cycle le moteur tente de déplacer les persos en calculant leur nouvel emplacement depuis leur position actuelle et leur vitesse. Mais avant de placer les persos une bonne fois pour toute à ce nouvel emplacement, le moteur vérifie ce qui se trouve entre la position d'origine et le nouvel emplacement. S'il y a une région, alors le moteur stoppera le personnage juste avant cette région. Bien sûr, il faut tenir compte de le direction du mouvement : si le personnage se déplace vers le bas on vérifie ce qui se trouve sous ses pieds, s'il se déplace vers le haut on vérifie ce qui se trouve au-dessus de sa tête, etc. Pour vérifier si une région se trouve à un certain emplacement, il "suffit" d'utiliser la fonction Region.GetAtRoomXY en scrutant pixel par pixel. - filoulefilou a écrit:
- Mais surtout, comment tu as fait pour les déplacements ? Comment tu as calculé la vitesse ?
Comme je disais, chaque personnage a une vitesse mais en plus une accélération. Puisqu'on est dans une représentation en deux dimensions, plus précisément, il y a une vitesse horizontale ( vit_x), une vitesse verticale ( vit_y), une accélération horizontale ( acceleration- resistance), et une accélération verticale ( force_saut+ gravite). Les nouvelles coordonnées du personnage se calculent donc comme suit : x_nouveau = x + vit_x y_nouveau = y + vit_y La vitesse elle-même se calcule comme suit : vit_x_nouveau = vit_x + accceleration + resistance vit_y_nouveau = vit_y + force_saut + gravite Pour le personnage joueur, la valeur d' acceleration est déterminée par les touches directionnelles (gauche et droite par défaut) sur lesquelles appuie le joueur et la valeur de resistance est définie par l'instance PF_Region sur laquelle se trouve le perso. La valeur de force_saut est déterminée par l'appui sur la touche saut (espace par défaut) qui prendra une valeur négative (i.e. "vers le haut de l'écran") lors d'un appui mais vaudra 0 le reste du temps et la valeur de gravite est une constante positive (i.e. "vers le bas de l'écran") qui pousse constamment le joueur vers les tréfonds ! Une fois qu'on a obtenu x_nouveau et y_nouveau, la fonction Scrute va vérifier ce qui se trouve les anciennes et les nouvelles coordonnées du personnage. En particulier, s'il y a un obstacle, alors on arrête le personnage où il faut et on passe la vitesse correspondance à 0. Est-ce que ça t'éclaire ? _________________ Ga is Ga Vous pouvez consulter l' aide d'AGS 3.2 en français et contribuer à la traduction et à l'amélioration si le cœur vous en dit ! |
|
| |
filoulefilou Cliqueur Amateur
Nombre de messages : 359
Date d'inscription : 24/05/2010
| Sujet: Re: Module Jeu de Plateforme Lun 9 Nov 2015 - 10:58 | |
| J'ai un problème majeur de lag en fait. AGS se ralentit grandement dès qu'on lance un saut. J'ai fait un niveau en résolution 1024*768 , j'ai un level qui fait 1024*2000 couleur 16bit Pour le moment je n'ai inclus aucun objet ni pnj mais ça rame sa race à mort.
|
|
| |
Kitai Délégué de la tasse bleue
Nombre de messages : 2907
Date d'inscription : 01/08/2006
| Sujet: Re: Module Jeu de Plateforme Lun 9 Nov 2015 - 15:05 | |
| - filoulefilou a écrit:
- J'ai un problème majeur de lag en fait.
AGS se ralentit grandement dès qu'on lance un saut. J'ai fait un niveau en résolution 1024*768 , j'ai un level qui fait 1024*2000 couleur 16bit Pour le moment je n'ai inclus aucun objet ni pnj mais ça rame sa race à mort.
Ça pourrait venir de ça : - Code:
-
// Force de saut if (IsKeyPressed(this.saut)) { // Si le joueur maintient la touche, on fait monter plus haut (maintien d'une force de saut) if ((this.touche_saut) && (this.detente < 0.0)) { if (this.vit_y > (-0.5 * this.force_saut)) this.detente = -0.7 * this.gravite; else this.detente = 0.5 * this.detente; this.vit_y += this.detente; } // Sinon, c'est un simple saut else this.Saute(false); } Tant que le joueur maintient la touche Saut enfoncée, this.detente continue d'avoir une valeur non nulle. Mais j'ai quand même du mal à comprendre pourquoi ça lag pour autant, et uniquement là, étant donné que les forces s'appliquent en permanence... Ce serait possible que tu m'envoies ton projet ? Histoire que j'essaie d'optimiser tout ça. _________________ Ga is Ga Vous pouvez consulter l' aide d'AGS 3.2 en français et contribuer à la traduction et à l'amélioration si le cœur vous en dit ! |
|
| |
filoulefilou Cliqueur Amateur
Nombre de messages : 359
Date d'inscription : 24/05/2010
| Sujet: Re: Module Jeu de Plateforme Lun 9 Nov 2015 - 17:02 | |
| |
|
| |
Kitai Délégué de la tasse bleue
Nombre de messages : 2907
Date d'inscription : 01/08/2006
| Sujet: Re: Module Jeu de Plateforme Lun 9 Nov 2015 - 18:08 | |
| Excuse-moi, est-ce que tu pourrais archiver en un autre format que 7z ? J'ai pas de logiciel pour le décompresser, bien que ce soit un format ouvert ! _________________ Ga is Ga Vous pouvez consulter l' aide d'AGS 3.2 en français et contribuer à la traduction et à l'amélioration si le cœur vous en dit ! |
|
| |
filoulefilou Cliqueur Amateur
Nombre de messages : 359
Date d'inscription : 24/05/2010
| Sujet: Re: Module Jeu de Plateforme Lun 9 Nov 2015 - 18:27 | |
| |
|
| |
Kitai Délégué de la tasse bleue
Nombre de messages : 2907
Date d'inscription : 01/08/2006
| Sujet: Re: Module Jeu de Plateforme Lun 9 Nov 2015 - 18:45 | |
| Parfait, merci ! Je pense que le ZIP est beaucoup plus répandu que 7z. _________________ Ga is Ga Vous pouvez consulter l' aide d'AGS 3.2 en français et contribuer à la traduction et à l'amélioration si le cœur vous en dit ! |
|
| |
Contenu sponsorisé
| Sujet: Re: Module Jeu de Plateforme | |
| |
|
| |
| Module Jeu de Plateforme | |
|