AccueilAccueil  FAQFAQ  RechercherRechercher  Dernières imagesDernières images  S'enregistrerS'enregistrer  Connexion  
Le deal à ne pas rater :
Coffret dresseur d’élite ETB Pokémon EV06 Mascarade Crépusculaire
56.90 €
Voir le deal

 

 Moteur de mouvements hyper simpliste.

Aller en bas 
4 participants
AuteurMessage
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.

Moteur de mouvements hyper simpliste. Empty
MessageSujet: Moteur de mouvements hyper simpliste.   Moteur de mouvements hyper simpliste. EmptyVen 24 Fév 2012 - 0:44

Voici un code super condensé mais qui fonctionne sans problème.
On trouve des dizaines de codes de déplacements mais la particularité de celui là c'est qu'il est très petit.

Script:
Code:
//Gravité.
if( place_free(x,y+1) ) _vspeed=min(_vspeed+_gravity, max_vspeed);

//Mouvements Verticaux
if(_vspeed!=0)
    repeat( ceil(abs(_vspeed)) )
        if( place_free(x,y+sign(_vspeed)) ) y+=sign(_vspeed);
        else{ _vspeed=0; break;} 

//Mouvements Horizontaux
if(_hspeed!=0)
    repeat( ceil(abs(_hspeed)) )
        if( place_free(x+sign(_hspeed),y+1) and !place_free(x,y+1) ){x+=sign(_hspeed); y+=1;} //Pente decendente.
        else if( place_free(x+sign(_hspeed),y) ) x+=sign(_hspeed); //Sol droit ou dans les air.
        else if( place_free(x+sign(_hspeed),y-1) and !place_free(x,y+1) ) { x+=sign(_hspeed); y-=1; _hspeed/=1.2; } //Pente montante.
        else{_hspeed=0; break;}

Les variables à déclarer (dans le create):
Code:
_hspeed=0;
_vspeed=0;
max_vspeed=12;
_gravity=1;

Exemple d'utilisation (dans un step):
Code:
//Deplacement vertical.
if( keyboard_check_pressed(vk_up) && !place_free(x,y+1) ) _vspeed=-12; //Si on appuis sur le bouton de saut et qu'on est au sol.
if( keyboard_check_released(vk_up) and _vspeed < 0 )  _vspeed/=2; //Si on relache le bouton avant d'atteindre la hauteur max on realise la moitié du saut.

//Deplacement horizontal.
hmove= keyboard_check(vk_right)-keyboard_check_(vk_left);

if(hmove!=0) _hspeed+=sign(hmove)*0.2;
else _hspeed=0;
if( abs(_hspeed)>max_hspeed ) _hspeed=sign(hmove)*max_hspeed;


Nb: ça gère les pentes jusqu'à 45° et la vitesse est réduite lors de la monté.


Dernière édition par Caly le Dim 4 Mar 2012 - 0:35, édité 2 fois
Revenir en haut Aller en bas
glcraft
Utilisateur confirmé: Rang *****
glcraft


Messages : 1698
Localisation : Entre l'Espagne, l'Italie, la Suisse, L'allemagne et le RU :P
Projet Actuel : Jeu de survie avancé
||--------

Moteur de mouvements hyper simpliste. Empty
MessageSujet: Re: Moteur de mouvements hyper simpliste.   Moteur de mouvements hyper simpliste. EmptyVen 24 Fév 2012 - 0:59

ce code est super utile gnii
par contre (ce n'est qu'un detail), des qu'il y a un objet "sprité" (avec place_free), il le prend pour un mur ou une pente. or, si c'est un objet qui joue le role de tiles, ou un piece dans mario, c'est pas pratique de s'arréter ^^
(apres, jai pas tester le code happy1, je dis juste ce que je pense avoir vu rire )
Revenir en haut Aller en bas
http://gameblog49.skyblog.com/
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.

Moteur de mouvements hyper simpliste. Empty
MessageSujet: Re: Moteur de mouvements hyper simpliste.   Moteur de mouvements hyper simpliste. EmptyVen 24 Fév 2012 - 6:15

Enfait non, car place_free est basè que sur les objets solides. Donc si tes objets de decos ne sont dèfinits comme etant solides le joueur passera a travers.
Revenir en haut Aller en bas
glcraft
Utilisateur confirmé: Rang *****
glcraft


Messages : 1698
Localisation : Entre l'Espagne, l'Italie, la Suisse, L'allemagne et le RU :P
Projet Actuel : Jeu de survie avancé
||--------

Moteur de mouvements hyper simpliste. Empty
MessageSujet: Re: Moteur de mouvements hyper simpliste.   Moteur de mouvements hyper simpliste. EmptyVen 24 Fév 2012 - 18:20

ah ouais, bien joué, je ne m'était pas rendu compte de ca !
Revenir en haut Aller en bas
http://gameblog49.skyblog.com/
Aïko
Débutant



Messages : 13

Moteur de mouvements hyper simpliste. Empty
MessageSujet: Re: Moteur de mouvements hyper simpliste.   Moteur de mouvements hyper simpliste. EmptySam 8 Aoû 2015 - 20:06

Salut je debute en gml et j'aimerais comprendre a quoi sert le symbole ! Et le symbole - entre keyboard_check(vk_right) et keyboard_check(vk_left) Dans un script merci d'avance
Revenir en haut Aller en bas
Mass
*Excellent utilisateur*
Mass


Messages : 3351
Localisation : Dans une canonnière wookie.
Projet Actuel : Monter des trucs et des machins

Moteur de mouvements hyper simpliste. Empty
MessageSujet: Re: Moteur de mouvements hyper simpliste.   Moteur de mouvements hyper simpliste. EmptySam 8 Aoû 2015 - 20:39

Le "!" c'est un not. Placé devant un opérateur, il inverse sa fonction (!= devient "non-égal à", etc).
Dans le script tu as sûrement vu quelque chose du type :
Code:
if (keyboard_check(vk_right) - keyboard_check(vk_left))
C'est une façon assez peu orthodoxe de vérifier que seule la touche "flèche droite" (vk_right) est enfoncée. En effet, keyboard_check vaut 1 si la touche est enfoncée, 0 si elle est relâchée. Donc :
- Si droite enfoncée et gauche relâchée, 1 - 0 = 1, la condition est vraie
- Si droite relâchée et gauche enfoncée, 0 - 1 = -1, la condition est fausse
- Si droite enfoncée et gauche enfoncée, 1 - 1 = 0, la condition est fausse
Tu peux traduire cette condition par l'utilisation d'un opérateur "and" et un "not" :
Code:
if (keyboard_check(vk_right) and !keyboard_check(vk_left))
ou de façon synthétique plus communément utilisée :
Code:
if (keyboard_check(vk_right) && !keyboard_check(vk_left))
Cela illustre l'usage du "not" :
- "keyboard_check(vk_left)" renvoie 1 si la touche est pressée, 0 si relâchée
- "!keyboard_check(vk_left)" renvoie 0 si la touche est pressée, 1 si relâchée. C'est le comportement inverse.

_________________
Revenir en haut Aller en bas
http://madmass.mype.fr/CBNA/
Aïko
Débutant



Messages : 13

Moteur de mouvements hyper simpliste. Empty
MessageSujet: Re: Moteur de mouvements hyper simpliste.   Moteur de mouvements hyper simpliste. EmptySam 8 Aoû 2015 - 23:27

Donc si j'ai bien compris (corrige moi si je me trompe) les symboles ! Et - veulent dire la même chose ?
Revenir en haut Aller en bas
Mass
*Excellent utilisateur*
Mass


Messages : 3351
Localisation : Dans une canonnière wookie.
Projet Actuel : Monter des trucs et des machins

Moteur de mouvements hyper simpliste. Empty
MessageSujet: Re: Moteur de mouvements hyper simpliste.   Moteur de mouvements hyper simpliste. EmptyDim 9 Aoû 2015 - 0:20

Non, le "-" est un moins gnii
En fait les fonctions qui renvoient vrai ou faux, comme keyboard_check, renvoient en réalité un chiffre (1 ou 0), ce qui permet de faire des calculs.

_________________
Revenir en haut Aller en bas
http://madmass.mype.fr/CBNA/
Aïko
Débutant



Messages : 13

Moteur de mouvements hyper simpliste. Empty
MessageSujet: Re: Moteur de mouvements hyper simpliste.   Moteur de mouvements hyper simpliste. EmptyDim 9 Aoû 2015 - 1:25

Ok je ne l'avait pas compris comme ça merci
Revenir en haut Aller en bas
Contenu sponsorisé





Moteur de mouvements hyper simpliste. Empty
MessageSujet: Re: Moteur de mouvements hyper simpliste.   Moteur de mouvements hyper simpliste. Empty

Revenir en haut Aller en bas
 
Moteur de mouvements hyper simpliste.
Revenir en haut 
Page 1 sur 1

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