| Gestion plus fine des sauts et des plateformes | |
|
|
Auteur | Message |
---|
Nephelë Débutant
Messages : 12 Projet Actuel : Rêves de Chatons
| Sujet: Gestion plus fine des sauts et des plateformes Jeu 14 Fév 2013 - 22:58 | |
| Bonjour à tous ! Je poste pour la première fois sur ce forum, donc j'espère ne pas avoir raté de règle de présentation ! Je travaille actuellement sur un projet Game maker dans le cadre de l'incubateur de jeu Pixelles ( ici) par correspondance, et même si j'ai appris énormément de choses en glanant ça et là et en mettant les mains dans le cambouis, je commence à arriver au bout de mes ressources en solitaire. Je viens donc quérir votre aide en espérant que j'aurai le niveau pour l'appliquer (acquis depuis hm... 3 semaines de travail ? Donc considérez moi comme une vraie débutante) En résumé : mon jeu est un jeu de plateforme en scrolling vertical : ça implique des sauts fins et précis, et une bonne gestion des plateformes aussi. Ma question est donc : comment faire en sorte que la longueur de mon saut change selon la longueur d'appui de touche (j'avais trouvé un bon tutorial ici, mais je n'arrive pas à trouver comment forcer l'arrêt : ici, tant que la touche est appuyée, le saut continue en exponentiel... J'ai pu limiter la vitesse via un réglage de la variable vspeed, mais pas le temps maximum de saut que peut permettre un appui longue durée sur ma touche espace) Et ma deuxième question sera : est-il possible de faire comme dans certains jeux de plateforme des plateformes qui soient traversables par en dessous mais pas par les côtés ou au dessus ? Merci d'avance ! |
|
| |
onilink_ Modérateur
Messages : 9183 Localisation : Montpellier Projet Actuel : Planet Centauri
OniDev
| Sujet: Re: Gestion plus fine des sauts et des plateformes Ven 15 Fév 2013 - 0:04 | |
| Salut, bienvenue :b Pour le saut en fonction de l'appuie de la touche, a vrai dire il y a pleins de solutions possibles, et ça dépend de ton moteur. Voici une façon de faire les choses simplement (et il existe des centaines d'autres façons de proceder). Tu déclare une variable dans ton create: jumpAdd = 0 ..et tu l'utilise en fonction du maintient de ta touche de saut. Tant qu'elle est < 1 tu incrémente ta vitesse de saut, et dès qu'elle dépasseras un seuil, tu n'applique plus cette 'accélération'. Code d'exemple: - Code:
-
// Le saut if(keyboard_check_pressed(vk_space) && onGround()) { vspeed = -3 }
if(keyboard_check(vk_space)) { if(jumpAdd < 1) // on vérifie que la variable ne dépasse pas un seuil { jumpAdd += 0.05 vspeed -= 0.2 // on accélère l'objet pour qu'il saute plus haut } } else jumpAdd = 0 Sinon pour ce qui est de faire une plateforme traversable, il y a encore plein de solutions. Une pas très intéressante est de mettre un code du genre dans son step: - Code:
-
solid = (y > player.y) Par contre de cette façon si d'autres objets sont sur ta plateforme, et qu'ils utilisent son attribut solid, bah ils vont la traverser x) Une meilleure solution serais d'ajouter une condition dans ton moteur lors de la collision avec une plateforme. |
|
| |
Nephelë Débutant
Messages : 12 Projet Actuel : Rêves de Chatons
| Sujet: Re: Gestion plus fine des sauts et des plateformes Ven 15 Fév 2013 - 2:26 | |
| Déjà, merci du coup de main et du "bienvenue" !
n'arrivant définitivement à rien au niveau du code (j'ai essayé en copiant collant, en modifiant, en le décortiquant pour le comprendre...) j'ai essayé de le transformer en suite d'évènements. Déjà, bon point, je ne fais pas planter le jeu haha
Mais pour le moment mon personnage n'atterrit pas. Tant que la touche espace est pressée il continue à grimper. Certes il n'accélère plus, mais non seulement il continue son bonhomme de chemin (remarque, en soi, c'est assez rigolo à voir !) mais en plus, même en phase descendante (soumise à la gravité) si je réappuis sur la touche espace il repart vers les étoiles, et ce malgré une condition de collision avec un objet solide sous ses pattes. |
|
| |
Térence Utilisateur confirmé: Rang *****
Messages : 2213 Localisation : Oui
| Sujet: Re: Gestion plus fine des sauts et des plateformes Ven 15 Fév 2013 - 7:32 | |
| A la fin du code de Oni, tu remplace le else et tout ce qui suit par : else { jumpAdd=0; vspeed=0; } Ps : bienvenue ! Une fille en plus sur le forum ca peut pas faire de mal ! |
|
| |
Nephelë Débutant
Messages : 12 Projet Actuel : Rêves de Chatons
| Sujet: Re: Gestion plus fine des sauts et des plateformes Ven 15 Fév 2013 - 8:16 | |
| Haha merci, mais vous attendez pas à une touche réellement féminine, mon projet en cours est une exception :p
Bon, par contre, je comprends d'un point de vue théorique le code, ainsi que l'ajout qu'y a fait Térence, mais essayer de le traduire en évènements ne fonctionnant pas (il ignore purement et simplement le "set vertical speed to 0"), il va bel et bien falloir que je me mette au code. Là dessus, j'ai deux soucis : 1, si j'ai bien compris, un tel code se mettrait a priori dans un step, je me trompe ? Et 2. Quand j'essaye de le faire (qui ne tente rien...) il me dit ne pas reconnaitre la fonction "onGround". J'ai essayé de "tricher" en créant une variable activée par la collision avec le sol appelée à l'identique avec =1 pour oui et =0 pour non, mais c'est du bricolage d'amateur qui tente encore de comprendre les variables, et de toute façon, il ne le reconnait toujours pas. J'ai fait des recherches sur le net pour voir si c'était moi qui ratait un truc évident, ce qui est surement le cas, mais là, je sèche. Et vu que j'ai passé toute la nuit sur ces données, le tutorial d'Onilink pour le gml me grille les yeux et fait supplier mon cerveau d'en remettre le décryptage à plus tard (temps que je n'ai évidemment pas vraiment puisqu'il me reste 10 jours avant la date butoir *sigh*).
Désolée de vous embêter avec des soucis d'absolute newbie, mais je suppose qu'il vaut mieux passer pour un âne et questionner plutôt que se la fermer et macérer dans son ignorance. |
|
| |
Térence Utilisateur confirmé: Rang *****
Messages : 2213 Localisation : Oui
| Sujet: Re: Gestion plus fine des sauts et des plateformes Ven 15 Fév 2013 - 8:34 | |
| Le code va effectivement dans step. La fonction onGround existe pas, sauf si c'est toi qui l'a créé, et tu peux utiliser true et false a la place de 1 et 0. |
|
| |
D-z Utilisateur confirmé: Rang *****
Messages : 1611 Localisation : Montpellier
| Sujet: Re: Gestion plus fine des sauts et des plateformes Ven 15 Fév 2013 - 14:37 | |
| Dans le code d'onilink_, onGround() est une fonction (repérable par les parenthèses lors de son appel, qui reçoivent les paramètres s'il y en a). Dans GM, les "fonctions" sont en réalité les scripts. Celui-ci ne reçoit aucun paramètre, et retourne si oui ou non l'objet qui l'appelle est sur le sol. Donc pour que le code fonctionne, il te faut créer un script "onGround" ayant ces spécifications. C'est dans ce script aussi que tu vas coder la gestion des plate-formes traversables ! En espérant ne pas me tromper (mon dieu que ça fait longtemps que j'ai pas touché à GM) : - Code:
-
// onGround()
var s; s = instance_place(x, y + 1, obj_sol); return (s != noone && y <= s.y - demiHauteur); // remplacer demiHauteur par la distance entre les pieds du perso et son origine. Ce code stocke dans s l'identifiant d'un éventuel sol sous les pieds du perso. Si un tel sol existe ( != noone), on vérifie que le perso est bien entièrement au-dessus en vérifiant sa coordonnée y par rapport à celle du sol en question. Et bienvenue ;) |
|
| |
onilink_ Modérateur
Messages : 9183 Localisation : Montpellier Projet Actuel : Planet Centauri
OniDev
| Sujet: Re: Gestion plus fine des sauts et des plateformes Ven 15 Fév 2013 - 15:11 | |
| Oui en fait onGround était la juste pour indiquer qu'il y avais un test de collision. Pour les tests de collisions il y a près d'une dizaine de fonctions utilisables sous GM, certaines sont plus simples a utiliser que d'autres qui elles sont plus puissantes. Par exemple vérifier que ton instance est en collision avec une autre instance solide: place_free(x, y) Ainsi si un seul pixel de ton instance est superposé a un seul pixel d'une instance solide, la fonction te renvoie false, sinon elle te revoie true. Si tu veux tester une collision sous ton objet, alors tu peut mettre place_free(x, y+1), simple et efficace. Cela peut avoir par contre certains désavantages étant donné que la fonction utilise le masque complet de ton instance, mais a mon avis, a ton niveau ce n'est pas un soucis :b Si tu a du mal avec les bases de GM, je pense que tu devrait prendre une ou deux journées afin de bien assimiler les bases surtout au niveau de la 'physique'. Essaye par exemple de déplacer un simple carré, ensuite d'appliquer des collisions avec d'autres carrés, puis ajouter de la gravité, etc etc. Faut y aller étape par étape sinon on ne s'en sort pas Je ne sais pas sous quelle version de GM tu est, mais essaye un peu de regarder ces exemples, ça pourrais t'être utile: http://xamaxe.free.fr/CBNA/public/GMscr/3%20-%20GML%20-%20Exemples/D%C3%A9placements/http://xamaxe.free.fr/CBNA/public/GMscr/3%20-%20GML%20-%20Exemples/Plateforme/Et si tu as d'autres questions n'hésites pas, c'est un plaisir d'aider les personnes qui font un minimum d'efforts :p |
|
| |
Nephelë Débutant
Messages : 12 Projet Actuel : Rêves de Chatons
| Sujet: Re: Gestion plus fine des sauts et des plateformes Mar 5 Mar 2013 - 15:14 | |
| Après 15 jours de maladie, retour en force, merci beaucoup de votre aide ! J'en ai profité pour commencer à potasser le code, les fonctions, etc... C'est utile, je comprends mieux ce que vous essayez de me faire comprendre. Bonne nouvelle : Ca marche déjà au moins pour le saut à temps changeant ! Je viens de réussir ça, j'ai des réglages à faire pour qu'on voit vraiment la différence, et après pas mal d'essais à coups de "ah, mince, la parenthèse !" j'arrive à quelque chose. J'ai finalement opté pour place_free(x, y+1)= false à la place de onGround. Et ça a l'air de bien fonctionner ! Après réglage, je me mettrai sur le saut à travers les plateformes (j'ai bien vérifié, mes items à récupérer n'étant pas en "solide", ça devrait rouler.) Merci beaucoup ! Je vous met une image pour l'occasion. (j'ai pas mis d'objets sur celle là, juste quelques plateformes pour tester les sauts) |
|
| |
Nephelë Débutant
Messages : 12 Projet Actuel : Rêves de Chatons
| Sujet: Re: Gestion plus fine des sauts et des plateformes Mar 5 Mar 2013 - 16:35 | |
| mise à jour (désolée du double post, si besoin je supprime celui ci et édite le précédent) : j'ai testé - Code:
-
solid = (y > player.y) En l'écrivant comme ceci : - Code:
-
var player; player = obj_feather; //obj_feather est mon personnage solid = (y > player.y); Dans un Step sur les plateformes. Mon personnage traverse bien les plate forme, mais pas tout à fait, fait un a-coup quand il est en train de le faire, et les plate forme ne sont plus solides même par au dessus. (en plus il me fait le même effet d'à-coups quand il la retraverse dans l'autre sens.) J'ai testé en changeant l'origine de mon personnage, mais ça ne change rien... |
|
| |
onilink_ Modérateur
Messages : 9183 Localisation : Montpellier Projet Actuel : Planet Centauri
OniDev
| Sujet: Re: Gestion plus fine des sauts et des plateformes Mar 5 Mar 2013 - 17:01 | |
| Salut, le soucis viens surement du fait qu'il faut aussi prendre en compte la taille de ton personnage lors du test de coordonnées. Par exemple si mon objet player fait 16 pixels de haut (son masque) alors il serais judicieux de le prendre en compte comme ça: solid = y >= player.y + 16 Pas trop dure la maladie sinon? :/ C'est jamais terrible en plein codage de jeu ça, ça fou le cerveau en bouilli et tout... |
|
| |
Nephelë Débutant
Messages : 12 Projet Actuel : Rêves de Chatons
| Sujet: Re: Gestion plus fine des sauts et des plateformes Mar 5 Mar 2013 - 18:23 | |
| Oh, ben j'ai juste enchainé les nuits de sommeil en allant jusqu'à 24 heures complètes x) Et effectivement, c'est fou comme tout parait limpide quand on est pas dans le brouillard. Bon, alors : nouvel essai avec la hauteur de mon personnage (j'avais essayé aussi avec la "demi hauteur") mais même résultat. Je linke juste vers mon exec si tu veux y jeter un oeil pour voir le souci que j'explique assez mal haha. - Code:
-
var player; player = obj_feather; //obj_feather est mon personnage solid = (y > player.y+106); test.exe https://mega.co.nz/#!J4MF1Z5S!CEutyAgsFfrkp24JWw3G8RelhhUhK5M6y3cBkVk9sCQ |
|
| |
onilink_ Modérateur
Messages : 9183 Localisation : Montpellier Projet Actuel : Planet Centauri
OniDev
| Sujet: Re: Gestion plus fine des sauts et des plateformes Mar 5 Mar 2013 - 18:55 | |
| |
|
| |
Nephelë Débutant
Messages : 12 Projet Actuel : Rêves de Chatons
| Sujet: Re: Gestion plus fine des sauts et des plateformes Mar 5 Mar 2013 - 19:15 | |
| super je me penche là dessus !
Dernière édition par Nephelë le Mar 5 Mar 2013 - 19:40, édité 2 fois |
|
| |
onilink_ Modérateur
Messages : 9183 Localisation : Montpellier Projet Actuel : Planet Centauri
OniDev
| Sujet: Re: Gestion plus fine des sauts et des plateformes Mar 5 Mar 2013 - 19:18 | |
| C'est assez vieux donc si tu veux un exemple plus personnalisé pour ton problème hésites pas a demander :b
|
|
| |
Nephelë Débutant
Messages : 12 Projet Actuel : Rêves de Chatons
| Sujet: Re: Gestion plus fine des sauts et des plateformes Mar 5 Mar 2013 - 19:41 | |
| Ben, personnalisé, sans que tu puisses avoir accès à mon bazar, ça me parait compliqué !
Alors, déjà, j'ai une question qui m'empêche de bien comprendre : que signifient les commandes "parWall" et "parFloor" ? |
|
| |
onilink_ Modérateur
Messages : 9183 Localisation : Montpellier Projet Actuel : Planet Centauri
OniDev
| Sujet: Re: Gestion plus fine des sauts et des plateformes Mar 5 Mar 2013 - 20:01 | |
| Ce sont juste des objets, et pas n'importe lesquels, des objets que j'ai mis en tant que parents. Ainsi, tout objet qui hérite de parWall sera considéré comme un mur par le moteur, et tout objet qui hérite de parFloor sera considéré comme un sol (passable). Cela permet d'avoir une multitude d'objets qui partagent les même attributs sans avoir a écrire mille fois la même chose dans le moteur. Ainsi if( place_meeting(x, y, parWall) ) prendras en compte tous les objets qui ont parWall comme parent, ce qui évite de faire plusieurs conditions inutilement |
|
| |
Nephelë Débutant
Messages : 12 Projet Actuel : Rêves de Chatons
| Sujet: Re: Gestion plus fine des sauts et des plateformes Mar 5 Mar 2013 - 20:04 | |
| ... C'est juste génial. Je comprends mieux la condition "obj_sol" de l'autre jour maintenant. Bon, j'dois m'absenter 2 petites heures, et je teste ça. Sérieux merci. |
|
| |
Nephelë Débutant
Messages : 12 Projet Actuel : Rêves de Chatons
| Sujet: Re: Gestion plus fine des sauts et des plateformes Mar 5 Mar 2013 - 23:26 | |
| après test (n'ayant clairement pas les compétences encore pour monter un code sur celui ci, manifestement) j'ai copié collé le code en remplaçant ce qui devait être remplacé, mais je n'arrive pas du tout au même résultat. Je ne peux que supposer des conflits, mais du coup ça commence à devenir compliquer de changer ça haha. J'ai donc récupéré pour le moment mon avancée avant ces essais, mais je rame toujours. (le meilleur que j'ai eu pour le moment, c'est à un moment mon personnage qui faisait le moonwalk pour contourner la plateforme au lieu de passer du haut vers le bas, mais rien à l'inverse) |
|
| |
Caly Utilisateur confirmé: Rang ****
Messages : 1285 Localisation : Haute Normandie Projet Actuel : Capturer, apprivoiser et dresser des Pokémons sauvages pour faire des spectacles de rue et en faire mon métier.
| Sujet: Re: Gestion plus fine des sauts et des plateformes Mer 6 Mar 2013 - 0:45 | |
| Bonsoir, Voici ci-dessous un exemple que je viens de réaliser pour mes besoins personnelles. Vus que ça correspond également à ta demande j'ai fait une version entièrement commentées pour toi. Ce GMK (gm8) contient les objets: Solid : qui n'est n'y traversable par le bas ni par le haut. TraversableBottom: traversable par le bas mais solide si tu est au dessus. TraversableTop: traversable par le haut mais pas par le bas (utile pour remplacer par le TraversableBottom pour certain jeux ou tu appuis en bas+saut pour descendre) J'ai essayais de commenter au maximum chaque lignes de code et ça reste personnalisable. Si tu as une incompréhension n’hésite pas à demander à Oni http://www.mediafire.com/?jmr8nc92v94klq8 |
|
| |
Contenu sponsorisé
| Sujet: Re: Gestion plus fine des sauts et des plateformes | |
| |
|
| |
| Gestion plus fine des sauts et des plateformes | |
|