| [Résolu] Collision ; ne pas se coller à un objet | |
|
|
Auteur | Message |
---|
Randal Utilisateur confirmé: Rang **
Messages : 446
| Sujet: [Résolu] Collision ; ne pas se coller à un objet Dim 20 Déc 2009 - 10:57 | |
| Bonjour à vous, J'ai un problème très ennuyant que voici: j'ai un personnage vu de haut qui peut se déplacer dans une carte. Cette carte contient des murs. C'est bon là, vous suivez ? :lng: Quand le bonhomme se dirige vers les murs en horizontal ou en vertical, il est stoppé grâce à ce code: Bonhomme x = xprevious; y = yprevious;Mais quand il se dirige en diagonale, il est aussi stoppé mais nettement. En fait, j'aimerais qu'il ne puisse pas franchir le mur mais qu'il puisse glisser le long du mur. Si les touches fléchées sont bas/gauche alors il glissera le long du mur en bas à gauche. Voici un exemple, allez en diagonal et vous verrez qu'il se bloquera. http://www.tempfiles.net/download/200912/74304/Collision.htmlMerci d'avance !
Dernière édition par Randal le Mar 29 Déc 2009 - 20:37, édité 3 fois |
|
| |
M@d_Doc Modérateur
Messages : 6600 Localisation : 47°44'8.04 Projet Actuel : aucun
| Sujet: Re: [Résolu] Collision ; ne pas se coller à un objet Dim 20 Déc 2009 - 11:42 | |
| sur www.lecbna.org il y a un tuto sur les collisions en gml. ça devrait répondre à tes questions ^^ (parce que c'est le système même que tu doit changer : s'il y a un mur, il faut pas revenir en arrière mais s'arrêter AVANT la collision ^^ _________________ Tous les icones de gm utilisables sur le cbna ICI |
|
| |
Randal Utilisateur confirmé: Rang **
Messages : 446
| Sujet: Re: [Résolu] Collision ; ne pas se coller à un objet Dim 20 Déc 2009 - 12:20 | |
| Merci bien mais je ne comprend pas trop en fait, j'ai bien regardé dans le manuel les fonctions move_contact_solid et place_free. Voici mon code de base de déplacement de mon bonhomme (comme sur l'exemple à télécharger du premier message):
if keyboard_check_direct(vk_up) { vspeed=-2; }
Je l'ai modifié en:
if keyboard_check_direct(vk_up) && place_free(x-3,y-3) { vspeed=-2; } else { move_contact_solid(180,8) }
J'avoue ne pas trop comprendre ce que je fais, le manuel utilise des mots complexe et ne donne pas d'exemple. |
|
| |
Termite Utilisateur confirmé: Rang ****
Messages : 1005 Localisation : Dans ta charpente ! Projet Actuel : RayEngine 5.0
| Sujet: Re: [Résolu] Collision ; ne pas se coller à un objet Dim 20 Déc 2009 - 12:24 | |
| - Randal a écrit:
- Merci bien mais je ne comprend pas trop en fait, j'ai bien regardé dans le manuel les fonctions move_contact_solid et place_free. Voici mon code de base de déplacement de mon bonhomme (comme sur l'exemple à télécharger du premier message):
if keyboard_check_direct(vk_up) { vspeed=-2; }
Je l'ai modifié en:
if keyboard_check_direct(vk_up) && place_free(x-3,y-3) { vspeed=-2; } else { move_contact_solid(180, }
J'avoue ne pas trop comprendre ce que je fais, le manuel utilise des mots complexe et ne donne pas d'exemple. Place_free(x,y) => pas d'objet présent aux coordonnés x,y move_contact_solid => déplacer jusqu'à rentrer en contact avec un solide, dans ton cas utilise un move_contact_all (pour les non-solide) _________________ Because these are not the words of God, the same God that burnt the knowing.
|
|
| |
Randal Utilisateur confirmé: Rang **
Messages : 446
| Sujet: Re: [Résolu] Collision ; ne pas se coller à un objet Dim 20 Déc 2009 - 12:51 | |
| Okay, merci. Mais je dois mettre quoi dans place_free sachant que ça peut venir de tous les côtés ? En haut, en bas, à gauche et à droite et là je n'ai que 2 possibilités. Pour le move_contact_solid, je ne comprend pas non plus. Pourquoi devrais-je me déplacer vers un non solide si j'y suis toujours ? Je ne vais pas être dans un solide si je ne peux pas passer à travers le mur... Quelqu'un peut me faire un exemple s'il vous plaît ? J'ai pas une très bonne logique quand des chiffres se mêlent au sujet. :p_svp:
Dernière édition par Randal le Dim 20 Déc 2009 - 12:52, édité 1 fois |
|
| |
M@d_Doc Modérateur
Messages : 6600 Localisation : 47°44'8.04 Projet Actuel : aucun
| Sujet: Re: [Résolu] Collision ; ne pas se coller à un objet Dim 20 Déc 2009 - 12:52 | |
| ma solution :
if keyboard_check(vk_up) { if place_free(x,y-2) { y-=2 } else { move_contact_solid(90,2) } }
bref, : si (on appuie sur 'haut') alors si ( c'est libre 2 pixels plus haut = on ne déplace pas l'objet, mais ça fait le même test de collision que si l'objet se trouvait en (x,y-2)) alors on monte de 2 pixels sinon (else) on va vers le haut, le plus loin possible sans rien toucher, avec une distance max de 2 pixels. (90, c'est la direction en degrés, sens trigonométriuqe)
bref, pareil pour les 4 directions. _________________ Tous les icones de gm utilisables sur le cbna ICI |
|
| |
Randal Utilisateur confirmé: Rang **
Messages : 446
| Sujet: Re: [Résolu] Collision ; ne pas se coller à un objet Dim 20 Déc 2009 - 13:02 | |
| Merci infiniment ! C'est toujours mieux avec un exemple ! |
|
| |
Randal Utilisateur confirmé: Rang **
Messages : 446
| Sujet: Re: [Résolu] Collision ; ne pas se coller à un objet Lun 28 Déc 2009 - 21:03 | |
| En fait, j'ai de nouveau un problème en mêlant ton code avec la gravité. Quand je saute en direction d'un objet, il se colle dessus et se décolle quand on relâche les touches. Comment faire pour que quand il saute vers un objet, genre des caisses, qu'il ne se colle pas ? J'espère avoir une réponse, ça finaliserai mon système de plateforme. Bonne soirée. |
|
| |
Chulien Utilisateur confirmé: Rang *****
Messages : 2232
| Sujet: Re: [Résolu] Collision ; ne pas se coller à un objet Lun 28 Déc 2009 - 21:28 | |
| salut! je n'ai lu que le premier post, mais je te conseille fortement les place_free et place_meeting, pas les event collision et si tu fais - Code:
-
if ( place_free(x+ x_vitesse , y+ y_vitesse) ) { x += x_vitesse y += y_vitesse } il ne pourra pas glisser le long du mur je pense qu'il faut faire deux place_free pour ça - Code:
-
if ( place_free(x+ x_vitesse , y) ) x += x_vitesse
if ( place_free(x, y+ y_vitesse) ) y += y_vitesse |
|
| |
Contenu sponsorisé
| Sujet: Re: [Résolu] Collision ; ne pas se coller à un objet | |
| |
|
| |
| [Résolu] Collision ; ne pas se coller à un objet | |
|