Gestion plus fine des sauts et des plateformes Hitskin_logo Hitskin.com

Ceci est une prévisualisation d'un thème de Hitskin.com
Installer le thèmeRetourner sur la fiche du thème



AccueilAccueil  FAQFAQ  RechercherRechercher  Dernières imagesDernières images  S'enregistrerS'enregistrer  ConnexionConnexion  
-20%
Le deal à ne pas rater :
Xiaomi Poco M6 Pro (8 Go / 256 Go) Noir
159.99 € 199.99 €
Voir le deal

 

 Gestion plus fine des sauts et des plateformes

Aller en bas 
5 participants
AuteurMessage
Nephelë
Débutant



Messages : 12
Projet Actuel : Rêves de Chatons

Gestion plus fine des sauts et des plateformes Empty
MessageSujet: Gestion plus fine des sauts et des plateformes   Gestion plus fine des sauts et des plateformes EmptyJeu 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 !
Revenir en haut Aller en bas
onilink_
Modérateur
onilink_


Messages : 9183
Localisation : Montpellier
Projet Actuel : Planet Centauri
OniDev

Gestion plus fine des sauts et des plateformes Empty
MessageSujet: Re: Gestion plus fine des sauts et des plateformes   Gestion plus fine des sauts et des plateformes EmptyVen 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.
Revenir en haut Aller en bas
Nephelë
Débutant



Messages : 12
Projet Actuel : Rêves de Chatons

Gestion plus fine des sauts et des plateformes Empty
MessageSujet: Re: Gestion plus fine des sauts et des plateformes   Gestion plus fine des sauts et des plateformes EmptyVen 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.
Revenir en haut Aller en bas
Térence
Utilisateur confirmé: Rang *****
Térence


Messages : 2213
Localisation : Oui

Gestion plus fine des sauts et des plateformes Empty
MessageSujet: Re: Gestion plus fine des sauts et des plateformes   Gestion plus fine des sauts et des plateformes EmptyVen 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 ! Wink
Revenir en haut Aller en bas
Nephelë
Débutant



Messages : 12
Projet Actuel : Rêves de Chatons

Gestion plus fine des sauts et des plateformes Empty
MessageSujet: Re: Gestion plus fine des sauts et des plateformes   Gestion plus fine des sauts et des plateformes EmptyVen 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.
Revenir en haut Aller en bas
Térence
Utilisateur confirmé: Rang *****
Térence


Messages : 2213
Localisation : Oui

Gestion plus fine des sauts et des plateformes Empty
MessageSujet: Re: Gestion plus fine des sauts et des plateformes   Gestion plus fine des sauts et des plateformes EmptyVen 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.
Revenir en haut Aller en bas
D-z
Utilisateur confirmé: Rang *****
D-z


Messages : 1611
Localisation : Montpellier

Gestion plus fine des sauts et des plateformes Empty
MessageSujet: Re: Gestion plus fine des sauts et des plateformes   Gestion plus fine des sauts et des plateformes EmptyVen 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 ;)
Revenir en haut Aller en bas
onilink_
Modérateur
onilink_


Messages : 9183
Localisation : Montpellier
Projet Actuel : Planet Centauri
OniDev

Gestion plus fine des sauts et des plateformes Empty
MessageSujet: Re: Gestion plus fine des sauts et des plateformes   Gestion plus fine des sauts et des plateformes EmptyVen 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 Razz

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
Revenir en haut Aller en bas
Nephelë
Débutant



Messages : 12
Projet Actuel : Rêves de Chatons

Gestion plus fine des sauts et des plateformes Empty
MessageSujet: Re: Gestion plus fine des sauts et des plateformes   Gestion plus fine des sauts et des plateformes EmptyMar 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.

Gestion plus fine des sauts et des plateformes Screen10
(j'ai pas mis d'objets sur celle là, juste quelques plateformes pour tester les sauts)
Revenir en haut Aller en bas
Nephelë
Débutant



Messages : 12
Projet Actuel : Rêves de Chatons

Gestion plus fine des sauts et des plateformes Empty
MessageSujet: Re: Gestion plus fine des sauts et des plateformes   Gestion plus fine des sauts et des plateformes EmptyMar 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...
Revenir en haut Aller en bas
onilink_
Modérateur
onilink_


Messages : 9183
Localisation : Montpellier
Projet Actuel : Planet Centauri
OniDev

Gestion plus fine des sauts et des plateformes Empty
MessageSujet: Re: Gestion plus fine des sauts et des plateformes   Gestion plus fine des sauts et des plateformes EmptyMar 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... Razz
Revenir en haut Aller en bas
Nephelë
Débutant



Messages : 12
Projet Actuel : Rêves de Chatons

Gestion plus fine des sauts et des plateformes Empty
MessageSujet: Re: Gestion plus fine des sauts et des plateformes   Gestion plus fine des sauts et des plateformes EmptyMar 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
Revenir en haut Aller en bas
onilink_
Modérateur
onilink_


Messages : 9183
Localisation : Montpellier
Projet Actuel : Planet Centauri
OniDev

Gestion plus fine des sauts et des plateformes Empty
MessageSujet: Re: Gestion plus fine des sauts et des plateformes   Gestion plus fine des sauts et des plateformes EmptyMar 5 Mar 2013 - 18:55

Malheureusement, j'ai pas vraiment internet, donc je pourrais pas tester Razz
(la j'ai quoi ... genre du 20ko/sec? Very Happy)

Pour ce qui est de ton soucis, j'avais fait quelques exemples de platformers il y a fort longtemps, et ceci correspond a ce que tu veux: http://www.lecbna.org/~onilink/GMscr/Exemples/Plateform/Sol_Passable.gm6

T'as d'autres exemples ici dans la section platformer: https://cbna.forumactif.com/t10537-ressources-banque-d-exemples-game-maker


J'espère que ça pourras t'aider :b
Revenir en haut Aller en bas
Nephelë
Débutant



Messages : 12
Projet Actuel : Rêves de Chatons

Gestion plus fine des sauts et des plateformes Empty
MessageSujet: Re: Gestion plus fine des sauts et des plateformes   Gestion plus fine des sauts et des plateformes EmptyMar 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
Revenir en haut Aller en bas
onilink_
Modérateur
onilink_


Messages : 9183
Localisation : Montpellier
Projet Actuel : Planet Centauri
OniDev

Gestion plus fine des sauts et des plateformes Empty
MessageSujet: Re: Gestion plus fine des sauts et des plateformes   Gestion plus fine des sauts et des plateformes EmptyMar 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
Revenir en haut Aller en bas
Nephelë
Débutant



Messages : 12
Projet Actuel : Rêves de Chatons

Gestion plus fine des sauts et des plateformes Empty
MessageSujet: Re: Gestion plus fine des sauts et des plateformes   Gestion plus fine des sauts et des plateformes EmptyMar 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" ?
Revenir en haut Aller en bas
onilink_
Modérateur
onilink_


Messages : 9183
Localisation : Montpellier
Projet Actuel : Planet Centauri
OniDev

Gestion plus fine des sauts et des plateformes Empty
MessageSujet: Re: Gestion plus fine des sauts et des plateformes   Gestion plus fine des sauts et des plateformes EmptyMar 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 Smile
Revenir en haut Aller en bas
Nephelë
Débutant



Messages : 12
Projet Actuel : Rêves de Chatons

Gestion plus fine des sauts et des plateformes Empty
MessageSujet: Re: Gestion plus fine des sauts et des plateformes   Gestion plus fine des sauts et des plateformes EmptyMar 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.
Revenir en haut Aller en bas
Nephelë
Débutant



Messages : 12
Projet Actuel : Rêves de Chatons

Gestion plus fine des sauts et des plateformes Empty
MessageSujet: Re: Gestion plus fine des sauts et des plateformes   Gestion plus fine des sauts et des plateformes EmptyMar 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)
Revenir en haut Aller en bas
Caly
Utilisateur confirmé: Rang ****
Caly


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.

Gestion plus fine des sauts et des plateformes Empty
MessageSujet: Re: Gestion plus fine des sauts et des plateformes   Gestion plus fine des sauts et des plateformes EmptyMer 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 guns

http://www.mediafire.com/?jmr8nc92v94klq8
Revenir en haut Aller en bas
Contenu sponsorisé





Gestion plus fine des sauts et des plateformes Empty
MessageSujet: Re: Gestion plus fine des sauts et des plateformes   Gestion plus fine des sauts et des plateformes Empty

Revenir en haut Aller en bas
 
Gestion plus fine des sauts et des plateformes
Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» plateformes problématiques[résolu -_-]
» Position des plateformes aléatoires
» [RESOLU] problèmes déplacements et sauts
» Problème de plateformes
» Petit problème de plateformes

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
Forum Le CBNA :: Développement :: Entraide débutants-
Sauter vers: