CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

Méthode professionnel d'une collision 2D

pandamark
pandamark
Niveau 6
21 juin 2006 à 19:46:08

Bonjour à tous ceux qui liront ce sujet. J´ai un question.

Pour ne pas m´avancer sur la 3D(trop compliquer pour l´instant), je vais poser ma question pour un moteur 2D.

J´aimerais savoir quel de ces méthodes est utilisée par les moteur physique professionnel(2D):
-On dessine un rectangle autours de nos objets et on teste si il y a eu collision

-On teste si il ya eu collision entre les pixel des objets

-On teste d´abord la collision avec un rectangle, puis si il y a collision avec les pixel?

:merci: d´avance

kikou81
kikou81
Niveau 9
21 juin 2006 à 19:49:00

En fait tu test si la position d´un sprite(x,y;w;h;) est la même ou non qu´avec un autre sprite :Si oui==>colision
==>Si non, pas collision

:ok:

pandamark
pandamark
Niveau 6
21 juin 2006 à 19:57:02

C´est pas vraiment ça que je demande, je sais tres bien comment faire une collision ^^.

Enfaite je demande quel des trois méthodes et la plus rapide(qui coute moins de mémoire), et qui donnet une meilleure immersion.

"On dessine un rectangle autours de nos objets et on teste si il y a eu collision"
Je mes suis trompez en écivant c´est plutot ça:

On dessine un rectangle un peu plus peit que nos objets et on teste si il y a eu collision

fil_razorback
fil_razorback
Niveau 10
21 juin 2006 à 20:03:53

A mon avis chez les pros ça se passe comme ça :

=> On test la collision entre deux rectangles englobants (contenant tout le bitmap)
==>Si collision entre ces deux là, detection au pixel ou entre plusieurs petits rectangles représentants avec précision chaque objet.

dynoplasmma
dynoplasmma
Niveau 9
21 juin 2006 à 20:05:55

pandamark->On dessine un rectangle autours de nos objets et on teste si il y a eu collision

Hum, chaque surface est rectangle, ya pas a dessinner de rectangle autour :) C´est deja fait.

Lapintade
Lapintade
Niveau 30
21 juin 2006 à 20:23:54

Je dirais : Tu mets une ou plusieurs forme de collision simple autours de ou des partie de ton sprites. Ca se fait comme ca aussi en 3D. Le formes simples sont soit des cercles ou soit des rectangles/carrés. Tu choisi la forme la plus adapté a ton objets.
Dans DNA, je fais tout avec des rectangles et bien sur certains objets ca colle moyen (les objets ronds)

kikou81
kikou81
Niveau 9
22 juin 2006 à 12:55:45

==>J´utilise cette methode aussi pour mon jeux, (d´apres une fonction ecrite par Fvirtman) et c´est super :ok:

Lapintade
Lapintade
Niveau 30
22 juin 2006 à 13:04:30

Yep y a un sujet qui a été ecrit il y a un mois qui parle de cela, ou il y a toutes les formules.

Altonfrere
Altonfrere
Niveau 10
22 juin 2006 à 13:23:39

Perso j´utilise plutôt un mix entre boites englobantes et tests plus précis au pixel ensuite. Mais je n´utilise pas le cadre du sprite tel quel car souvent les sprites sont plus petits que la taille du bloc. Donc je prends un cadre qui colle le mieux au sprite. Ca ne sera donc pas du 16*16, 32*32 ou autre mais plutot quelqueqchose du genre 12*14, 28*24 etc...

Ensuite je mémorise quel côté de cette boite entre en collision et je commence à tester les pixels en partant de coin là.

Exemple : si c´est le côté droit du personnage qui entre en collision avec un bloc du décor (donc son côté gauche pour le bloc décor) je teste les pixels du perso de la droite vers la gauche et les pixels du décor du la gauche vers la droite ... Côté haut -> haut vers le bas du perso et bas vers le haut du décor etc..

Une optimisation assez rapide au test de pixels est d´utiliser des masques de bits (0 pour vide et 1 pour plein) et faire les tests ligne par ligne. Par exemple pour un sprite 32x32 on prend des unsigned long sur 32 bits ca permet de coder le sprite sur 32 ulong. Et en testant :

// le perso va vers le haut
if ( (maskPerso[i] & maskDecor[height-1-i]) != 0)

{
//il y a collision (on arrête la boucle)
}

enfin il y a 36 méthodes différentes, à chacun d´a
dapter et prendre celle qui lui convient le mieux. Certains jeux 2D n´ont même pas besoin de test si précis, si les sprites sont fait de manière à occuper tout un bloc les simples bounding box sont suffisantes.

Altonfrere
Altonfrere
Niveau 10
22 juin 2006 à 13:33:10

faut pas oublier (comme j´ai pu le faire) la notion de vitesse de déplacement ^^´ là je présentais la méthode "brute" ;) les tests sont légèrement différents en fonction de la surface d´intersection

godrik
godrik
Niveau 30
22 juin 2006 à 13:36:59

J´avais fait un shoot-them up dans lequel j´avais choisit de ne pas faire de test sur le sprite. Mais j´avais fait une description de l´objet sous forme d´arbre.
les feuilles décrivant entièrement mon objet et les degré du dessus étant des boites englobantes.
Ca me servait a décrire des objets compliqués et ca marchait pas trop mal.

Fvirtman
Fvirtman
Niveau 10
22 juin 2006 à 14:02:40

Pour un shoot em up, selon moi, il est inutile de recourir a autre chose que le test de boite englobante. Quelle importance de faire un pixel perfect dans ce cas ? ça va trop vite pour s´en apercevoir :-)

grosbill7b
grosbill7b
Niveau 10
22 juin 2006 à 14:05:56

je me souviens d´un mortal kombat, je ne sais plus lequel ni sur quelle console, mais on pouvait faire un code pour voir les collisions. donc en gros, quand on donnait un coup, on voyait apparaitre un rectangle rouge sur l´endroit frappé, et un rectangle vert sur la cible, si l´un touche l´autre, collision il y a... je sais pas si ça t´aide ou non...

godrik
godrik
Niveau 30
22 juin 2006 à 14:14:50

Fvirtman, chez moi ca se voyait. En plus, je suis un joueur de shoot-them up au pixel près.
Mais en tout cas, c´était fun a coder! :) (c´est presque ce qui m´interesse le plus en fait)

pandamark
pandamark
Niveau 6
22 juin 2006 à 14:15:22

Merci beaucoup pour vos réponse je vais aller méditer la dessus ^^.

Qosimo
Qosimo
Niveau 37
22 juin 2006 à 14:52:08
Sous forums
  • Aide à l'achat Mac
  • Internet
  • Macintosh
  • Création de sites web
  • Création de Jeux
  • Linux
  • Programmation
  • Steam Deck
  • Hardware
La vidéo du moment