| | Problème de gravité en online | |
| | Auteur | Message |
---|
notiz85 Utilisateur confirmé: Rang *****
Messages : 2004 Localisation : Vendée Projet Actuel : Moteur d'ombre pour un projet plateforme 2D...
| Sujet: Problème de gravité en online Sam 30 Déc 2006 - 19:23 | |
| C'est remoi Voila maintenant que j'ai résou mon problème pour la gravité en GML, je voudrais l'appliquer en online... Sa pas de problème voici mes codes : - Code:
-
// DROITE : x = mplay_data_read(5);
if global.ident = 1 { if (keyboard_check(vk_right)) { if place_free(x+argument0,y) { x+=argument0; } mplay_data_write(5,x); } }
- Code:
-
// GAUCHE : x = mplay_data_read(5);
if global.ident = 1 { if (keyboard_check(vk_left)) { if place_free(x-argument0,y) { x-=argument0; } mplay_data_write(5,x); } }
- Code:
-
// HAUT : vspeed=mplay_data_read(7);
if global.ident = 1 { if (keyboard_check(vk_up)) { if !place_free(x,y+1) { vspeed=argument0; } mplay_data_write(7,vspeed); } }
- Code:
-
// SI COLLISION AVEC LE 'SOL' // par exemple Et la je sais pas trop si je mets le code GML avec tous pour que se soit online, mplay_data_read&write ou si on met juste les actions D&D par défaut (faites pour) ? Car j'ai essayé avec les deux mais sa ne marche pas ! La collision de mon perso avec un sol se fait aussi s'il rentre en collision avec la partie du bas du sol !!!
Note : tous est dans l'Event Step sinon les deux actions D&D pour la collision avec le sol sont dans Event Collision 'block' // le nom du mur
Et une petite screen au cas ou... Voila si quelqu'un c'est comment résoudre mon problème :p_svp: :p_merci: @NOTIZ@ |
| | | daminetreg Administrateur
Messages : 16998 Localisation : Siege du CBNA! Projet Actuel : Site Web du CBNA, version beta :
| Sujet: Re: Problème de gravité en online Sam 30 Déc 2006 - 22:56 | |
| Plutôt que de mettre tes codes dans des évènements tels que: droite, gauche ou haut, met les dans step. Ici il y a un code fonctionnel: https://cbna.forumactif.com/viewtopic.forum?t=3464&highlight=C'est celui que je donne, je l'ai un peu modifié ici: - Code:
-
//Script de maintenance du joueur 1
//Gestion Gravité gravity_direction = 270; if place_free(x,y+1) gravity=0.35; if not place_free(x,y+1) gravity=0; if vspeed>18 vspeed=18; /////Début gestion et écriture du multi///// //Déplacements if global.ident = 1 { if (keyboard_check(vk_left)) {x -= 6} if (keyboard_check(vk_right)) {x +=6} if (keyboard_check(vk_up)) {if not place_free(x,y+1) vspeed = -12;} //Ecriture mplay_data_write(5,x); mplay_data_write(6,y); mplay_data_write(7,vspeed); mplay_data_write(8,gravity); }
//Lecture x = mplay_data_read(5); y = mplay_data_read(6); vspeed=mplay_data_read(7); gravity=mplay_data_read(8); (Lecture & écriture de gravity est en fait inutile, ce me semble, je ne sais pas pourquoi je l'avais mis) Si tu gères toutes tes modifs & lectures dans step, tout le reste tu peux le mettre en actions normales. Dans collision with obj_sol, tu n'as qu'à mettre ceci: - Code:
-
if (vspeed > 0 && not place_free(x,y+vspeed)) move_contact(270); vspeed = 0; Voili voilou. Mais dans ton cas, tu es nécessairement contraint à user d'un code dans step, parce que la gravité agit en permanence pas seulement sur l'agissement du joueur, donc il faut que la position x et y ainsi que la vitesse etc. soit lue en permanence. Lorsque tu fais du vue de dessus tu peux te permettre à ne faire des updates que dans les event des touches, mais ici tu es contraint à tout faire passer par step, et puis c'est beaucoup plus sûr. |
| | | notiz85 Utilisateur confirmé: Rang *****
Messages : 2004 Localisation : Vendée Projet Actuel : Moteur d'ombre pour un projet plateforme 2D...
| Sujet: Re: Problème de gravité en online Dim 31 Déc 2006 - 11:04 | |
| A tu as du croire que : // DROITEet // GAUCHEou // HAUTétait l'Event Keyboard ' ...' ? Car sinon non, je sais très bien qu'il faut mettre la gravité dans l'Event Step et le reste aussi... Et sa je le fais très bien Sinon merci pour le deuxième code mais pourquoi : ? - Citation :
- if (vspeed>0 && !place_free(x,y+vspeed))
{ move_contact(270); vspeed=0; } y+vspeed : Normalement ce n'est pas : y+1 ??? move_contact(270); : Ce n'est pas : move_contact_solid(direction,12); ? Quel est la différence ? Ou alors on indique 270 pour la direction de la gravité et se serai donc sa qui ferai que le perso reste accrocher au block pas en dessous ? La gravité serai un coup normale et un autre coup vers le haut ou quelque chose comme sa ? PS: je peux pas tester pour le moment car je suis sur le portable |
| | | notiz85 Utilisateur confirmé: Rang *****
Messages : 2004 Localisation : Vendée Projet Actuel : Moteur d'ombre pour un projet plateforme 2D...
| Sujet: Re: Problème de gravité en online Dim 31 Déc 2006 - 11:57 | |
| J'ai tester le deuxième code mais mon perso reste toujours coincer :gniah: Donc il y a mon perso. - Code:
-
// Dans l'Event Step : if place_free(x,y+1) { gravity_direction=270; gravity=0.5; } else { gravity_direction=270; gravity=0; }
if vspeed>12 { vspeed=12; }
// Touche Droite x = mplay_data_read(5);
if global.ident = 1 { if (keyboard_check(vk_right)) { if place_free(x+argument0,y) { x+=argument0; } mplay_data_write(5,x); } }
// Touche Gauche x = mplay_data_read(5);
if global.ident = 1 { if (keyboard_check(vk_left)) { if place_free(x-argument0,y) { x-=argument0; } mplay_data_write(5,x); } }
// Touche Haut vspeed=mplay_data_read(7);
if global.ident = 1 { if (keyboard_check(vk_up)) { if !place_free(x,y+1) { vspeed=argument0; } mplay_data_write(7,vspeed); } }
- Code:
-
// Dans l'Event Collision avec block if vspeed>0 && !place_free(x,y+vspeed) { move_contact(270); vspeed=0; } Du coup je vois pas du tout le problème Car il y a bien la gravité (donc pas en online) dans l'Event Step et quand avec les touches pour sauter et se diriger... :p_svp: :p_merci: @NOTIZ@ |
| | | daminetreg Administrateur
Messages : 16998 Localisation : Siege du CBNA! Projet Actuel : Site Web du CBNA, version beta :
| Sujet: Re: Problème de gravité en online Dim 31 Déc 2006 - 15:26 | |
| move_contact(270); est logique étant donné que ça n'arrêtte le perso que lorsqu'il arrive de haut en bas, qui est la gravity_direction. Et c'est une ancienne fonction qui revient au même que les nouvelles. Grâce à y+vspeed tu es sûr de prévoir correctement l'arrêt, alors qu'avec y+1 lorsqu'il y a de forte vitesses la collision ne se fait pas toujours terriblement. Quant à ce code: - Code:
-
// Dans l'Event Collision avec block if vspeed>0 && !place_free(x,y+vspeed) { move_contact(270); vspeed=0; } Je ne l'ai pas écris comme ça, mais bien comme ceci: - Code:
-
if vspeed>0 && !place_free(x,y+vspeed) move_contact(270);
vspeed=0; C'est à dire que s'execute ceci: "move_contact(270);" si "vspeed>0 && !place_free(x,y+vspeed) " puis de toutes manières que "vspeed>0 && !place_free(x,y+vspeed)" soit validée ou non: vspeed est mis à 0. C'est une sorte de solution de dernier recours, mais on peut effectivement s'en passer. Si tu utilisais mon code ça fonctionnerait, mais peu importe, car je l'ai testé. :nezrouge: Enfin bref, le problème dans le tiens vient simplement du fait que tu n'update pas la valeur y, vspeed ou y tout seul ne suffisent pas, j'ai déjà essayé il faut les deux en même temsp! Donc voilà, ce serait bien aussi que tu fasses les lectures de slots en fin de code et toutes ensembles, tu peux également regrouper toutes les écritures dans un seul global.ident, c'est plus joli et plus rapide. EDIT/ Argh! J'essayai de corriger un problème que tu as résolu, toi en fait ton prob vient du fait que tes gars se "collent" au plafond, je vois pas trop pour quoi sur le coup, peux tu m'envoyer le gm6? |
| | | notiz85 Utilisateur confirmé: Rang *****
Messages : 2004 Localisation : Vendée Projet Actuel : Moteur d'ombre pour un projet plateforme 2D...
| | | | Contenu sponsorisé
| Sujet: Re: Problème de gravité en online | |
| |
| | | | Problème de gravité en online | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |