| Moteur de mouvements hyper simpliste. | |
|
|
Auteur | Message |
---|
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: Moteur de mouvements hyper simpliste. Ven 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 |
|
| |
glcraft Utilisateur confirmé: Rang *****
Messages : 1698 Localisation : Entre l'Espagne, l'Italie, la Suisse, L'allemagne et le RU :P Projet Actuel : Jeu de survie avancé
||--------
| Sujet: Re: Moteur de mouvements hyper simpliste. Ven 24 Fév 2012 - 0:59 | |
| ce code est super utile 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 , je dis juste ce que je pense avoir vu ) |
|
| |
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: Moteur de mouvements hyper simpliste. Ven 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. |
|
| |
glcraft Utilisateur confirmé: Rang *****
Messages : 1698 Localisation : Entre l'Espagne, l'Italie, la Suisse, L'allemagne et le RU :P Projet Actuel : Jeu de survie avancé
||--------
| Sujet: Re: Moteur de mouvements hyper simpliste. Ven 24 Fév 2012 - 18:20 | |
| ah ouais, bien joué, je ne m'était pas rendu compte de ca ! |
|
| |
Aïko Débutant
Messages : 13
| Sujet: Re: Moteur de mouvements hyper simpliste. Sam 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 |
|
| |
Mass *Excellent utilisateur*
Messages : 3351 Localisation : Dans une canonnière wookie. Projet Actuel : Monter des trucs et des machins
| Sujet: Re: Moteur de mouvements hyper simpliste. Sam 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. |
|
| |
Aïko Débutant
Messages : 13
| Sujet: Re: Moteur de mouvements hyper simpliste. Sam 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 ? |
|
| |
Mass *Excellent utilisateur*
Messages : 3351 Localisation : Dans une canonnière wookie. Projet Actuel : Monter des trucs et des machins
| Sujet: Re: Moteur de mouvements hyper simpliste. Dim 9 Aoû 2015 - 0:20 | |
| Non, le "-" est un moins 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. |
|
| |
Aïko Débutant
Messages : 13
| Sujet: Re: Moteur de mouvements hyper simpliste. Dim 9 Aoû 2015 - 1:25 | |
| Ok je ne l'avait pas compris comme ça merci |
|
| |
Contenu sponsorisé
| Sujet: Re: Moteur de mouvements hyper simpliste. | |
| |
|
| |
| Moteur de mouvements hyper simpliste. | |
|