AccueilAccueil  FAQFAQ  RechercherRechercher  Dernières imagesDernières images  S'enregistrerS'enregistrer  Connexion  
Le Deal du moment : -39%
Pack Home Cinéma Magnat Monitor : Ampli DENON ...
Voir le deal
1190 €

 

 [Résolu] Collision ; ne pas se coller à un objet

Aller en bas 
4 participants
AuteurMessage
Randal
Utilisateur confirmé: Rang **



Messages : 446

[Résolu] Collision ; ne pas se coller à un objet Empty
MessageSujet: [Résolu] Collision ; ne pas se coller à un objet   [Résolu] Collision ; ne pas se coller à un objet EmptyDim 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:

Event - Collision 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.html

Merci d'avance !


Dernière édition par Randal le Mar 29 Déc 2009 - 20:37, édité 3 fois
Revenir en haut Aller en bas
M@d_Doc
Modérateur
M@d_Doc


Messages : 6600
Localisation : 47°44'8.04
Projet Actuel : aucun

[Résolu] Collision ; ne pas se coller à un objet Empty
MessageSujet: Re: [Résolu] Collision ; ne pas se coller à un objet   [Résolu] Collision ; ne pas se coller à un objet EmptyDim 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 ^^

_________________
[Résolu] Collision ; ne pas se coller à un objet Control-commentTous les icones de gm utilisables sur le cbna ICI  [Résolu] Collision ; ne pas se coller à un objet Main1-change-sprite
Revenir en haut Aller en bas
http://www.lecbna.org
Randal
Utilisateur confirmé: Rang **



Messages : 446

[Résolu] Collision ; ne pas se coller à un objet Empty
MessageSujet: Re: [Résolu] Collision ; ne pas se coller à un objet   [Résolu] Collision ; ne pas se coller à un objet EmptyDim 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.
Revenir en haut Aller en bas
Termite
Utilisateur confirmé: Rang ****
Termite


Messages : 1005
Localisation : Dans ta charpente !
Projet Actuel : RayEngine 5.0

[Résolu] Collision ; ne pas se coller à un objet Empty
MessageSujet: Re: [Résolu] Collision ; ne pas se coller à un objet   [Résolu] Collision ; ne pas se coller à un objet EmptyDim 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,Cool
}

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.
Revenir en haut Aller en bas
Randal
Utilisateur confirmé: Rang **



Messages : 446

[Résolu] Collision ; ne pas se coller à un objet Empty
MessageSujet: Re: [Résolu] Collision ; ne pas se coller à un objet   [Résolu] Collision ; ne pas se coller à un objet EmptyDim 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 ? gha 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. triste

:p_svp:


Dernière édition par Randal le Dim 20 Déc 2009 - 12:52, édité 1 fois
Revenir en haut Aller en bas
M@d_Doc
Modérateur
M@d_Doc


Messages : 6600
Localisation : 47°44'8.04
Projet Actuel : aucun

[Résolu] Collision ; ne pas se coller à un objet Empty
MessageSujet: Re: [Résolu] Collision ; ne pas se coller à un objet   [Résolu] Collision ; ne pas se coller à un objet EmptyDim 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.

_________________
[Résolu] Collision ; ne pas se coller à un objet Control-commentTous les icones de gm utilisables sur le cbna ICI  [Résolu] Collision ; ne pas se coller à un objet Main1-change-sprite
Revenir en haut Aller en bas
http://www.lecbna.org
Randal
Utilisateur confirmé: Rang **



Messages : 446

[Résolu] Collision ; ne pas se coller à un objet Empty
MessageSujet: Re: [Résolu] Collision ; ne pas se coller à un objet   [Résolu] Collision ; ne pas se coller à un objet EmptyDim 20 Déc 2009 - 13:02

Merci infiniment ! C'est toujours mieux avec un exemple ! coeur
Revenir en haut Aller en bas
Randal
Utilisateur confirmé: Rang **



Messages : 446

[Résolu] Collision ; ne pas se coller à un objet Empty
MessageSujet: Re: [Résolu] Collision ; ne pas se coller à un objet   [Résolu] Collision ; ne pas se coller à un objet EmptyLun 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.

[Résolu] Collision ; ne pas se coller à un objet Sanstitre1-84e1176f84

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. [Résolu] Collision ; ne pas se coller à un objet Happy1
Revenir en haut Aller en bas
Chulien
Utilisateur confirmé: Rang *****
Chulien


Messages : 2232

[Résolu] Collision ; ne pas se coller à un objet Empty
MessageSujet: Re: [Résolu] Collision ; ne pas se coller à un objet   [Résolu] Collision ; ne pas se coller à un objet EmptyLun 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
Revenir en haut Aller en bas
http://sites.google.com/site/chuliendev
Contenu sponsorisé





[Résolu] Collision ; ne pas se coller à un objet Empty
MessageSujet: Re: [Résolu] Collision ; ne pas se coller à un objet   [Résolu] Collision ; ne pas se coller à un objet Empty

Revenir en haut Aller en bas
 
[Résolu] Collision ; ne pas se coller à un objet
Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» [Résolu] Position en X d'une collision entre deux objet
» [Résolu] Objet qui suis le view d'un autre objet
» Appeler, dans un objet, une var d'un autre objet [résolu]
» probleme de collision d'objet carré
» Collision, empêcher l'empilement d'objet

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: