IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Physique Discussion :

Collision avec un mur : personnage plus large que mur


Sujet :

Physique

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    429
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Décembre 2008
    Messages : 429
    Points : 60
    Points
    60
    Par défaut Collision avec un mur : personnage plus large que mur
    Bonjour à tous,
    bon, je vous soumets un problème qui semblait simple... et j'espère effectivement qu'il le sera pour au moins un d'entre vous!

    Je me suis mit au labyrinthe.

    Simple je pensais. Mais là, mon perso et ses 4 points de détections. Le perso est plus LARGE que mes murs sur l'axe des Y. Alors, je peux passer a travers ces murs en me mettant en position où le point ne touche plus.

    D'abord, je comprends mal ça! Mes HitTest, autrement que pour un mur, un monstre par exemple... j'ai pas besoin de point de collision. Je dis: ' Si mc perso touche mc monstre, mc perso meurt. ' Pourquoi lorsqu'il s'agit d'un mur, on ne peut plus se servir de tout les pixels, mais de 4? Pourquoi 4 points de détections? Pourquoi pas 12? C'est possible?

    J'ai besoin d'aide. Je tiens fort a développer des labyrinthes. Mais si je trouve pas la solution, je vais pas poursuivre.

    J'suis en Flash 8.

    Merci d'avance pour votre aides et votre attentions!

    Ivady

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    429
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Décembre 2008
    Messages : 429
    Points : 60
    Points
    60
    Par défaut
    bon finalement, rien de full math, mais ça règle mon problème:

    if(Key.isDown(Key.UP)){
    press = true;
    this.perso.gotoAndStop("up");
    this.perso._y-=vitesse;
    this.fif._y-=vitesse;
    this.perso.f.nextFrame();
    }

    'fif' étant le nom absurde de mon mc 'détection':

    if(mur.hitTest(fif._x,fif._y-fif._height/2,true)){
    this.fif._y+=vitesse;
    this.perso._y+=vitesse;
    }

    J'ai voulu faire perso.fif, mais ça ne fonctionnait pas (pourquoi?). Donc, j'ai créer un mc sur le _root., 'fif'... Et fif et perso voyagent ensemble! Du coup, je donne les positions que je veux (approximativement) à mes points de détections. Je sais... c'est du bricolage! Je sais qu'on peut également tout simplement lui indiquer LES pixels voulues... C'est plus précis! Mais bon... ça fait mon affaire dans le moment!

  3. #3
    Membre émérite
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 537
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 537
    Points : 2 548
    Points
    2 548
    Par défaut
    Je n'y connais rien en action script.

    Mais s'intéresser il va falloir tu décider si c'est un problème de langage ou d'algo. Tu sembles un peu mélanger les deux et ça ne va t'apporter que des ennuis.

    Ton soucis peut être résolu simplement avec une détection de collision segment/segment . Tu peux pour se faire faire une collision segment/droite (tu passe les deux points du segment dans l'équation de droite, le signa va te dire de quel coté ils sont de la droite, si les signes diffèrent, alors il y a collision segment/droite).

    S'il y a collision droite/segment, tu cherche le point de collision et vérifie s'il y a vraiment collision segment/segment.

    Sinon, un arbre BSP peut résoudre ce genre de soucis aussi.

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    429
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Décembre 2008
    Messages : 429
    Points : 60
    Points
    60
    Par défaut
    l'algo, c la logique, le langage c la syntaxe. Je fais la différence. Merci pour ton aide, mais peut-être que cela aidera quelqu'un d'autre qui passera par ici, par ce que je ne connais pas vraiment les termes que tu utilises. Tu es dans un autre langage. Moi mon problème était simplement que mon algo calculait 4 points de détection a mon perso. Or, le perso étant plus grand que les murs verticales, le mur pouvait 'se faufiler' entre les 4 points.

    J'ai régler mon prob de 2 façon:
    1- j'ai mit le calque des murs plus épais que sur l'image
    2- j'ai dorénavant demander qu'on calcule les 4 points d'un autre mc, plus petit que mon perso, appeler fif, tout simplement parce que c'était vite a taper. Or, il a fallut ensuite que je commande a ce mc fif de répondre aux flèches du clavier de la même façon que le perso répondait déjà, ainsi, le mc fif et le mc perso se suivent.

    Et jusqu'a ce que quelqu'un trouve un bogue, ça fonctionne bien! J'espère que cela pourra éclairer quelqu'un d'autre après moi!

  5. #5
    Expert éminent

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Points : 7 618
    Points
    7 618
    Billets dans le blog
    3
    Par défaut
    sans doute parcequ'une detection de collision ne se fait jamais contre des points mais des volumes ?

    En général, un personage (très simplifié) est une capsule (ou un cylindre). Si de plus celui-ci comporte des limitations d'orientation (toujours vertical par exemple), alors la detection de collision est limitée à un cercle contre une droite.

    On arrive donc: Cercle 2D animé (le personage) contre droite fixe (le mur) => capsule 2D contre segment...
    En cherchant "swept sphere versus plane" sur google tu doit trouver l'algo qui t'indiquera les points de collision et le moment exact ou la collision se produit.
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    429
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Décembre 2008
    Messages : 429
    Points : 60
    Points
    60
    Par défaut
    très intéressant nicroman. Je me demandais aussi pourquoi on ne pourrait pas calculer la collision de toute une forme au lieu de ridiculement calculer 4 points! Je vais m'orienter vers ce que tu me dis! Merci!

Discussions similaires

  1. <option> plus large que <select>
    Par sunvialley dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 09/11/2006, 16h02
  2. Etat est plus large que le papier
    Par lebienestrare dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 04/09/2006, 20h55
  3. [DBCOMBOBOX] liste est plus large que le combo lui-même
    Par valoji dans le forum Bases de données
    Réponses: 3
    Dernier message: 18/05/2006, 16h59
  4. un tableau plus large que la fenêtre.
    Par maniaco_jazz dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 04/12/2005, 23h25
  5. [Datareport] Etat plus large que le papier
    Par SpaceFrog dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 09/09/2002, 11h45

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo