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

 

 Collisions multiples

Aller en bas 
4 participants
AuteurMessage
Herdge
Très bonne participation
Herdge


Messages : 164

Collisions multiples Empty
MessageSujet: Collisions multiples   Collisions multiples EmptyVen 20 Juin 2014 - 12:06

Je rencontre un problème de calcul de collision dans mon jeu et j'aimerai trouver une solution simple et optimisée.
J'utilise une variable "hard" pour certains objets afin de savoir si j'autorise ou non le passage du joueur sur l'objet (à la place de solid, hard = true -> le joueur bloque, hard = false -> le joueur peut passer).

Le problème est que dans certains cas assez rare le joueur est en superposition sur un objet "hard = true" et un objet "hard = false". Le jeu donne alors la priorité à l'objet ayant l'id le plus petit (assez logique en somme). J'aimerai que l'objet avec "hard = true" est la priorité quoi qu'il arrive.

Ma question concerne donc la recherche des objets en collision lorsqu'ils sont multiples. Faut-il utiliser une boucle while et détecter tous les objets en collision avec le joueur, quelle fonction utiliser pour être sûr de tous les trouver.

Merci j'espère que c'est à peu près clair...
Revenir en haut Aller en bas
onilink_
Modérateur
onilink_


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

Collisions multiples Empty
MessageSujet: Re: Collisions multiples   Collisions multiples EmptyVen 20 Juin 2014 - 12:56

Problème épineux.

Je pense qu'il faut le prendre a l'envers.
C-a-d au lieu de regarder si le joueur marche sur un objet, regarder depuis l'objet si le joueur marche sur lui (si hard == true).

_________________
Collisions multiples Runningpotato1Collisions multiples TvF6GED Collisions multiples MdetltS
Revenir en haut Aller en bas
Asu
Utilisateur confirmé: Rang ****
Asu


Messages : 895

Collisions multiples Empty
MessageSujet: Re: Collisions multiples   Collisions multiples EmptyVen 20 Juin 2014 - 13:01

Pour sortir d'un objet solide tu as move_out_solid() si je me trompe pas. Lis la doc.

_________________
‎<‎Cysteine‎>‎ nON mais la touche maj s'active/se désactive toute seule
‎<‎Cysteine‎>‎ et a du mal à réponDRE QUANd j'appuie dessus
‎<‎Cysteine‎>‎ et je l'ai démont2? IL Ny a rien DEDANs
Revenir en haut Aller en bas
Térence
Utilisateur confirmé: Rang *****
Térence


Messages : 2213
Localisation : Oui

Collisions multiples Empty
MessageSujet: Re: Collisions multiples   Collisions multiples EmptyVen 20 Juin 2014 - 13:32

Normalement, si tu fais ta condition dans l'event collision de ton perso, il devrait le faire pour tous les objets et tu devrais pas avoir de problème (enfin je crois).

Et sinon ouais c'est move_outside_solid(), mais qui est assez vite limité dès que t'as un sprite assez gros et avec une forme bizarre, quand tu veux trouver la direction vers laquelle faire sortir l'objet. Je me rappelle qu'avec moi ca faisait de la grosse ***** :/ Le plus simple serait donc de faire en sorte qu'il ne rentre jamais dans un objet solid, mais le move_outside_solid() permet de faire des collisions vraiment bien, en fonction de la forme exacte du truc (c'est pas très clair je sais  gnii ). En java j'avais trouvé un moyen de contourner le truc en faisant un move_outside_solid() avec en argument de direction celle entre le point de la collision (ce qu'on ne peut pas récupérer avec GM) et le joueur...
Ouais donc en conclusion les collisions même avec GM c'est ******, faut utiliser de préférence des petits blocs de mur.

Mais donc si ce que je disais en haut marche pas, celle d'oni fonctionne correctement ^^

_________________
Je suis partie sur les ailes du vent et la tempête m'a ramenée.
Revenir en haut Aller en bas
Herdge
Très bonne participation
Herdge


Messages : 164

Collisions multiples Empty
MessageSujet: Re: Collisions multiples   Collisions multiples EmptyVen 20 Juin 2014 - 13:45

Merci mais je ne peux pas utiliser "solid" car en fait l'objet n'est pas solid pour tous les joueurs (ie : la variable hard est un tableau hard[i] où i est le numéro du joueur).

Dans mon algo si le joueur est en superposition au moment de la création de l'objet, hard[i] = false sinon dès qu'il n'y a plus collision hard[i] = true.

Le problème survient lorsque le joueur est entouré de cet objet car tout ceux autour de lui sont hard = true alors que celui en dessous de lui est hard = false. La priorité de déplacement dépend alors de l'odre des id des objets concernés.
Revenir en haut Aller en bas
Térence
Utilisateur confirmé: Rang *****
Térence


Messages : 2213
Localisation : Oui

Collisions multiples Empty
MessageSujet: Re: Collisions multiples   Collisions multiples EmptyVen 20 Juin 2014 - 13:51

Essaie de faire un truc du genre, dans l'event collision avec ton mur de l'objet héros :
Code:
if(other.hard==true){
  other.solid=true;
  move_outside_solid(point_direction(other.x,other.y,x,y),100);
  other.solid=false;
}

_________________
Je suis partie sur les ailes du vent et la tempête m'a ramenée.
Revenir en haut Aller en bas
Herdge
Très bonne participation
Herdge


Messages : 164

Collisions multiples Empty
MessageSujet: Re: Collisions multiples   Collisions multiples EmptyVen 20 Juin 2014 - 17:11

Merci à tous. J'ai fini par m'en sortir avec un with(objet à checker) en testant si parmi eux certains étaient en collision et avait hard = true. Dans ce cas là je break le test et j'interdis le déplacement.
Revenir en haut Aller en bas
Contenu sponsorisé





Collisions multiples Empty
MessageSujet: Re: Collisions multiples   Collisions multiples Empty

Revenir en haut Aller en bas
 
Collisions multiples
Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» If multiples conditions
» Vue partielle et bouttons multiples ....
» Conditions multiples [Résolu]
» Qestion à choix multiples
» Création d'un jdr "à choix multiples"

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: