AccueilAccueil  FAQFAQ  RechercherRechercher  Dernières imagesDernières images  S'enregistrerS'enregistrer  Connexion  
Le deal à ne pas rater :
Jeux, jouets et Lego : le deuxième à -50% (large sélection)
Voir le deal

 

 problème de collision ? objets bloqués après déplacement.

Aller en bas 
3 participants
AuteurMessage
Elriks
Débutant



Messages : 17

problème de collision ? objets bloqués après déplacement.  Empty
MessageSujet: problème de collision ? objets bloqués après déplacement.    problème de collision ? objets bloqués après déplacement.  EmptyLun 21 Jan 2013 - 21:01

Bonsoir,

une vidéo vaut mieux qu'un long discours le problème se verra de lui même :



je peux déplacer un objet dans toutes les directions, mais une fois que celui ci a été déplace 1 fois il sera impossible de le redeplacer car je pense qu'il "mord" sur l'objet auquel il se trouve collé et les 2 sont bloqué, je peux plus bouger ni l'objet 1 ni son voisin.

pour confirmer, il suffit que je fonce sur un objet déjà collé a un voisin, et on voit bien le 1mm d'enfoncement de l'objet.


Code:
if (place_free(x-4,y) && place_meeting(x-1,y,obj_koala))
{
   
    if(keyboard_check(vk_right))
    {
            hspeed = 6;
    }   
}
   
    else
    {
      if(!place_free(x,y))
      {
      hspeed = 0;
      }   
    }

Merci
Revenir en haut Aller en bas
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.

problème de collision ? objets bloqués après déplacement.  Empty
MessageSujet: Re: problème de collision ? objets bloqués après déplacement.    problème de collision ? objets bloqués après déplacement.  EmptyLun 21 Jan 2013 - 21:46

Bonsoir,

Essai de remplacer:
Code:
if(!place_free(x,y))
      {
      hspeed = 0;
      } 

Par :
Code:
if( !place_free(x+hspeed,y) and hspeed!=0 )
        hspeed-=sign(hspeed);
Revenir en haut Aller en bas
Elriks
Débutant



Messages : 17

problème de collision ? objets bloqués après déplacement.  Empty
MessageSujet: Re: problème de collision ? objets bloqués après déplacement.    problème de collision ? objets bloqués après déplacement.  EmptyLun 21 Jan 2013 - 21:54

Même problème.

J'ai découvert la fonction "Move_contact_solid" qui est très bien, ca ne stuck plus l'objet mais le problème est que la fonction "téléporte" l'objet , enfin elle se déplace trop vite pour que cela fasse un effet de mouvement.

je cherche a vérifier si on peut créer l'effet de mouvement
Revenir en haut Aller en bas
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.

problème de collision ? objets bloqués après déplacement.  Empty
MessageSujet: Re: problème de collision ? objets bloqués après déplacement.    problème de collision ? objets bloqués après déplacement.  EmptyLun 21 Jan 2013 - 22:02

Même probleme? Etrange doit avoir autre chose qui cloche dans ton code.

Sinon pour le movement je te laisse regarder par ici :

https://cbna.forumactif.com/t11593-les-exemples-de-caly -> Bounce Engine et Joystick Control.

Par contre je ne connais pas ton niveau donc je ne sais pas si tu va comprendre mon code.
Revenir en haut Aller en bas
Elriks
Débutant



Messages : 17

problème de collision ? objets bloqués après déplacement.  Empty
MessageSujet: Re: problème de collision ? objets bloqués après déplacement.    problème de collision ? objets bloqués après déplacement.  EmptyMar 22 Jan 2013 - 10:52

Merci je regarderai cela Smile

Ce problème me rend fou, j'avais aussi crée le sujet sur le forum officiel de GM, j'y ai laissé mon projet a télécharger et je test les possibilités qu'on me propose, la dernière j'ai pas eu le temps de la développer. Je comprends pas pourquoi c'est aussi bordelique pour un simple push-stop

http://gmc.yoyogames.com/index.php?showtopic=568332
Revenir en haut Aller en bas
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.

problème de collision ? objets bloqués après déplacement.  Empty
MessageSujet: Re: problème de collision ? objets bloqués après déplacement.    problème de collision ? objets bloqués après déplacement.  EmptyMar 22 Jan 2013 - 11:40

Bonjour,

Ce matin je suis sous Windows et donc GM de dispo et j'ai un peut de temps à te consacrer voilà le tout fait en 5min chrono.

Script: "body_update"
Code:
//Mouvements Verticaux
if(v_speed!=0)
    repeat( ceil(abs(v_speed)) ){
        event_user(0);
        if( place_free(x,y+sign(v_speed)) ) y+=sign(v_speed);
        else{ v_speed=0; break;} 


//Mouvements Horizontaux
if(h_speed!=0)
    repeat( ceil(abs(h_speed)) ){
        event_user(0);
        if( place_free(x+sign(h_speed),y) ) x+=sign(h_speed);
        else{h_speed=0; break;}
    }
(event_user(0) utilisé comme ça te permet de gérer les variables de collisions si jamais tu en as besoin)

obj_koala:
Create Event:
Code:

h_speed=0;
v_speed=0;


Step Event:
Code:

h_speed=( keyboard_check(vk_right)-keyboard_check(vk_left) )*3;
v_speed=( keyboard_check(vk_down)-keyboard_check(vk_up) )*3;
body_update();

obj_block:
Create Event:
Code:

h_speed=0;
v_speed=0;


Step Event:
Code:

if( place_free(x-4,y)
&&  place_meeting(x-1,y,obj_koala)
&&  keyboard_check(vk_right) )
    h_speed=6;

body_update();

Voilà Wink bon courage pour la suite.
Revenir en haut Aller en bas
Elriks
Débutant



Messages : 17

problème de collision ? objets bloqués après déplacement.  Empty
MessageSujet: Re: problème de collision ? objets bloqués après déplacement.    problème de collision ? objets bloqués après déplacement.  EmptyMar 22 Jan 2013 - 14:42

Je testerai cela ce soir, merci infiniment happy1


Pourrais je abuser un chouia en te demandant d'expliquer un peu le code (sur les grandes lignes) ? Car j'avoue ne pas avoir ton niveau et certaines lignes me paraissent obscure même si j'en reconnais des fonctions mathématiques. J'aime comprendre comment fonctionne les choses et pourquoi on obtient tel ou tel résultat

La par exemple :

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

repeat, ceil, abs, l'event_user(0) ...le pourquoi de leur association alors qu'il me semble que l'idée d'abs et du ceil est le même, obtenir un entier (du moins, il me semble) ..je suis un peu perdu

je vais tenter une explication sommaire tout de même :

j'ai -6.1231456

abs = 6.1231456
ceil = 6
repeat ...il repete X fois dont X depend de la vitesse l'event_user(0) ?
Revenir en haut Aller en bas
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.

problème de collision ? objets bloqués après déplacement.  Empty
MessageSujet: Re: problème de collision ? objets bloqués après déplacement.    problème de collision ? objets bloqués après déplacement.  EmptyMar 22 Jan 2013 - 16:41

Alors explication, accroche toi car je ne suis pas sur de bien expliquer.

Je commence par créer mes propres variables de déplacement:
hspeed -> h_speed;
vspeed -> v_speed;
comme ça j'ai un contrôle totale sur le code et non plus de l'automatisé fait par GM.

Viens ensuite cette ligne:
Code:
h_speed=( keyboard_check(vk_right)-keyboard_check(vk_left) )*3;
keyboard_check(KEY) retourne 1 si la touche est appuyés ou 0 si elle ne l'ai pas.

Ce qui donne comme valeurs possibles:
0 - 1=-1
0 - 0= 0
1 - 1= 0
1 - 0= 1
Donc trois valeurs:
-1, 0 et 1

-1: on appuis sur gauche.
0 : on appuis sur les deux touches ou a rien.
1 : on appuis sur la droite.

Et on finis par multiplier par 3 qui est la vitesse de déplacement, tu peut modifier ce chiffre par ce que tu veux.

Apres tout ça on appel body_update.

Dans ce script (fonction) on va avoir besoin des deux variable h_speed et v_speed.

Code:
//Mouvements Horizontaux
if(h_speed!=0)
    repeat( ceil(abs(h_speed)) ){
        event_user(0);
        if( place_free(x+sign(h_speed),y) ) x+=sign(h_speed);
        else{h_speed=0; break;}
    }

if(h_speed!=0)
Donc si la vitesse horizontal est différente de zéro.

repeat( ceil(abs(h_speed)) ){
repeat(N){Y} : ça répète N fois l'opération Y.
ceil(N): retourne la valeur plafond de N (ex: 2.40 devient 3), on met ceil() car si on a 0.20 en vitesse il faut quant même que l'opération s’exécute au moins une fois et aussi car repeat() ne prend que des nombres entiers.
abs(N): retourne la valeur absolue de N (ex: -3 devient 3) car encore une fois repeat() n'accepte pas les chiffres négatifs.

Donc ceil(abs(-3.785215 )) retournera 4.

event_user(0);
En fait cette ligne ne pas obligatoire et ne sert a rien dans cet l'exemple.
Ça appel l’évènement 0 de l'objet qui appel le script.
Je met toujours cette ligne car comme ça je peut faire du cas par cas dans tous mes objets en n'ayant qu'un seul script.

if( place_free(x+sign(h_speed),y) ) x+=sign(h_speed);
sign(N): renvois soit -1 soit 0 soit 1 celons la valeur de N (négative, nulle ou positive)
Donc soit x+=1 ou x+=-1 (pas zéro car on a la premier condition qui est "si la vitesse est différente de 0".


Voilà je pense avoir tout dit même si c'est pas simple à expliquer :s
Revenir en haut Aller en bas
Elriks
Débutant



Messages : 17

problème de collision ? objets bloqués après déplacement.  Empty
MessageSujet: Re: problème de collision ? objets bloqués après déplacement.    problème de collision ? objets bloqués après déplacement.  EmptyMer 23 Jan 2013 - 8:54

Bonjour,

désolé de pas avoir pu répondre avant, j'ai été kidnappé bien malgré moi pour une soirée au travail.

Alors j'ai testé ton code, effectivement il fonctionne parfaitement pour la collision mais le mouvement est ..comment l'expliquer.. je vais faire une vidéo c'est plus simple (le déplacement du koala en stand only est normal, j'ai viré tout le code que j'avais inclue pour le déplacement du koala , cela rentrait en collision avec le tien et quand j'appuyais sur une flèche, il partait devant de façon infinie en traversant tout les blocks) :



en gros mon jeu fait 40 cases sur 40 cases, quand le koala se déplace, il doit se déplacer seulement de case en case (mais sans se téléporter) sinon il risque de déplacer 2 blocks en même temps, d’être bloqué pour passer entre 2 block car il est 1mm en trop sur la gauche etc... et le block en lui même ne part plus devant mais seulement sur 1mm, plus comme avant, je pense que c'est lié au fait qu'on a pris le controle sur h et v_speed , du coup il donne plus une valeur continue de vitesse a l'objet mais seulement pour "1 touche du koala" , si je mets le h_speed a 40 le block se téléportera d'une case etc..

je pense que je devrais juste restructurer le code du step de obj_block et inclure une boucle for ou while au bon endroit, je regarderai cela en rentrant du travail.

Merci beaucoup en tout les cas pour le temps que tu as consacré a cela Smile
Revenir en haut Aller en bas
onilink_
Modérateur
onilink_


Messages : 9180
Localisation : Montpellier
Projet Actuel : Planet Centauri
OniDev

problème de collision ? objets bloqués après déplacement.  Empty
MessageSujet: Re: problème de collision ? objets bloqués après déplacement.    problème de collision ? objets bloqués après déplacement.  EmptyMer 23 Jan 2013 - 10:43

Pour un mouvement case par case, tu peut utiliser ce code:

#create
Code:
dir = 0
moving = false

key[0] = vk_right
key[1] = vk_up
key[2] = vk_left
key[3] = vk_down

lx[0] = 1
lx[1] = 0
lx[2] = -1
lx[3] = 0
ly[0] = 0
ly[1] = -1
ly[2] = 0
ly[3] = 1

#step
Code:
if(place_snapped(16, 16))
    moving = false

for(i=0; i<4; i+=1) {
    if(!moving && keyboard_check(key[i]))
    {
        dir = i
        moving = true
    }
}

if(moving) {
    if(place_free(x+lx[dir], y+ly[dir]))
    {
        x += lx[dir]
        y += ly[dir]
    }
    else
    moving = false
}

C'est pour des cases de 16*16px, mais tu peut changer la taille dans place_snapped(16, 16) Wink

Pour ce qui est des collisions customs a toi de modifier place_free(x+lx[dir], y+ly[dir])
Tu peut exemple mettre un place_meeting, a toi de voir.

_________________
problème de collision ? objets bloqués après déplacement.  Runningpotato1problème de collision ? objets bloqués après déplacement.  TvF6GED problème de collision ? objets bloqués après déplacement.  MdetltS
Revenir en haut Aller en bas
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.

problème de collision ? objets bloqués après déplacement.  Empty
MessageSujet: Re: problème de collision ? objets bloqués après déplacement.    problème de collision ? objets bloqués après déplacement.  EmptyMer 23 Jan 2013 - 14:51

Bonjour,
Normalement si tu met que ça dans l'objet block il ne s'arrêtera qu'au contact d'un autre objet solide.

Code:
if( place_free(x-4,y)
&&  place_meeting(x-1,y,obj_koala)
&&  keyboard_check(vk_right) )
    h_speed=6;

body_update();

S'il se déplace que par Xpx c'est que tu doit avoir une autre condition dans ton objet quelque par qui l’arrête.

Pour ce qui est pour le Koala c'est normal, après tu peut laisser ton ancien code dans l'objet du Koala peut être que ça fonctionnera (je n'ai pas GM Studio je ne peut pas voir ton projet), sinon tu as le code d'Oni qui est très bon aussi.
Revenir en haut Aller en bas
Elriks
Débutant



Messages : 17

problème de collision ? objets bloqués après déplacement.  Empty
MessageSujet: Re: problème de collision ? objets bloqués après déplacement.    problème de collision ? objets bloqués après déplacement.  EmptyMer 23 Jan 2013 - 15:22

Merci a vous 2, je passe tout mon temps libre a apprendre le GML mais j'ai encore du boulot, je test tout cela ce soir happy1
Revenir en haut Aller en bas
Contenu sponsorisé





problème de collision ? objets bloqués après déplacement.  Empty
MessageSujet: Re: problème de collision ? objets bloqués après déplacement.    problème de collision ? objets bloqués après déplacement.  Empty

Revenir en haut Aller en bas
 
problème de collision ? objets bloqués après déplacement.
Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» Bug après une collision
» Objets sans I.D. résolu seul après enquête
» problème après le GM
» [Resolu] pb general de collision et de deplacement
» Deux objets deviennent immobiles à la collision

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: