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

Collision déplacement objet à la souris

shinigota
shinigota
Niveau 10
04 mars 2014 à 01:55:36

Salut !
J'ai un petit projet à faire en spé ISN, bref fais un jeu (en java, avec swing obligatoirement), vraiment petit (déjà avec ce que je compte faire, je fais bien plus que le cahier des charges imposé par le prof :hap: ), qui est plutôt bien avancé :
On est dans une sorte de labyrinthe, avec des boites partout, sous une de ses boites se trouve une clé qui permet d'aller à la sortie.
En gros faut déplacer les boites astucieusement sans se bloquer pour trouver la clé, et finalement aller à la sortie.
https://www.dropbox.com/s/tibfs57jd0crz26/Capture%20d%27%C3%A9cran%202014-03-04%2001.35.15.png
Pour l'instant on est que le carré jaune.
J'ai fais une grosse partie du jeu, je peux déplacer les boites, mon personnage, la sortie et la clé fonctionnent, toutes les collisions sont détectées sauf une :
Celle entre la boite qu'on glisse en maintenant la souris enfoncée et les autres, j'ai déjà passé 3 plombes à faire les collisions du personnage "manuellement", et au passage ça a tellement été un calvaire que je sais pas du tout si c'est la bonne manière (mais ça marche) : quand je rentre dans une boite, celle ci me re déplace à l'opposé, de la distance entre le bord de la boite et de moi.
Nan franchement, voilà un dessin je dois être difficile à suivre :hap:
https://www.dropbox.com/s/pndro5p8v1nack2/Capture%20d%27%C3%A9cran%202014-03-04%2001.43.56.png
La flèche jaune, mon mouvement, la flèche rouge, le mouvement généré par la collision (dont la distance correspond au trait rouge).
Bref après avoir bouffé plein de temps de réflexion intense, je fais une overdose de collision (j'ai horreur de ça :hap: ), et je sais pas comment m'y prendre par la suite :
C'est simple, si quand je glisse une boite celle-ci en rencontre une, elle se déplacera que en X ou en Y selon là ou la collisions se situe, et peu importe là où est la souris (https://www.dropbox.com/s/7ck14kqov9j09su/Capture
%20d%27%C3%A9cran%202014-03-04%2001.49.58.png
la croix : le curseur, la flèche : mouvement)

Et donc c'est là que je suis perdu...

Bref merci d'avance, ça serait génial si quelqu'un pourrait m'aider !
Bonne soirée ! (ou plutôt matinée ? :hap: )

watk0s
watk0s
Niveau 10
04 mars 2014 à 02:40:16

En gros tu cherches à determiner les collisions entre deux boites c'est bien ça ?
Les boites sont déplacées librement sur la carte ou selon un quadrillage ?

shinigota
shinigota
Niveau 10
04 mars 2014 à 12:52:19

Pas que entre deux boites, mais entre "toutes" les boites, enfin la boite sélectionnée peut entrer en contact avec plein de boites selon où elle se situe :oui:

Sinon, elles sont déplacées librement, là où est la souris
C'est du drag & drop banal quoi :hap:

[notch]
[notch]
Niveau 10
04 mars 2014 à 14:49:27

Si c'est selon un quadrillage, tu a juste à regarder si les cases à proximité de ta boite contiennent une boite pour savoir si tu peux les déplacer.

Si c'est pas selon un quadrillage, tu peux regarder ici : http://fr.openclassrooms.com/informatique/cours/theorie-des-collisions/collision-aabb (du moment que tes boites ne sont pas orienté (cad que ses cotés sont parallèles aux axes de ton repère :ok: ) )) et tu auras juste a tester la collision de ta boite avec toute les autres.

shinigota
shinigota
Niveau 10
04 mars 2014 à 16:53:35

C'est à peut près ça que je fais pour mes collisions mais sans booléen :oui:
Mais à partir de ça je vois pas comment pouvoir restreindre le mouvement de ma boite (qu'elle puisse se déplacer que le long d'un autre)

watk0s
watk0s
Niveau 10
05 mars 2014 à 00:39:39

C'est simple dans le cas ou le déplacement de ta boite est stocké dans deux variables X et Y.

L'idée c'est : tu récupères l'ordre de déplacement donné par la souris. Imaginons que tu veuilles que la boite se déplace vers le haut et la gauche.
Tu déplaces la boite vers la gauche, donc seulement selon X. Si il y a collision tu la remets à sa place, puis tu fais la même chose vers le haut selon Y.

Je ne sais pas comment tu gères le code à ce niveau là par contre

dark_drow
dark_drow
Niveau 15
05 mars 2014 à 09:04:06

http://deepnight.net/a-simple-platformer-engine-part-1-basics/

shinigota
shinigota
Niveau 10
06 mars 2014 à 01:08:18

Merci beaucoup de votre aide, j'ai suivi les modèles, j'y arrive à peu près, enfin j'vais me débrouiller, ça commence à marcher :oui:

shinigota
shinigota
Niveau 10
06 mars 2014 à 16:14:45

J'ai encore un autre problème, enfin moins important :(
Là mes boites glissent enfin parfaitement en Y, le long d'autres boites, du moment qu'elle est en dessous ou au dessus des boites avec laquelle elle est en collision.
Mais je lui ai en quelque sorte "forcé" de glisser en Y, et du coup je vois pas comment je pourrais la faire glisser en X : sur les côtés droite ou gauche, ou alors, haut ou bas (donc là en Y)...

J'me suis dit qu'il fallait que je fasse ça avec les arrêtes en contact des boites en collisions : si par exemple, au moment où je rentre en collision (j'ai une condition qui vérifie la collision selon les coordonnées), j'ai : "X de la boite que je glisse " == "X de la boite en collision + sa largeur + 1" (+ 1 car les boites glissent le long l'une de l'autre, et pas sûr l'arrête) , alors je suis en collision du côté gauche, et les arrêtes communes sont : celle de droite pour la boite que le glisse, et celle de gauche pour l'autre, enfin elles sont pas en collision, mais elle se touchent (là je dois être difficile à suivre, désolé :hap: )
Enfin, si vous n'avez pas compris (ce qui est surement le cas :hap: ), voilà ce que je cherche à faire : https://www.dropbox.com/s/9tgiwzleb86mli7/Capture%20d%27%C3%A9cran%202014-03-06%2016.08.10.png
Et donc ma boite rouge pourrait ici que glisser soit en haut, ou en bas (ou alors être libre de mouvement dans la partie droite)
(et oui je suis un artiste :oui: )

Mais le problème, c'est que par exemple si je bouge rapidement la souris, la boite va directement rentrer dans celle où elle est censé être en collisions, les arrêtes n'auront pas forcément le temps d'être en contact et dans ce cas, y'a pas d'arrête en contact, et là je coince ...

Sinon, il faudrait que je récupère les coordonnées de ma boite au moment de la collision, et avec ça je déduise où elle doit se situer, mais je trouve aps de solution convenable ...

Merci d'avance, désolé du dérangement, et encore une fois désolé si je suis difficile à comprendre, je déteste les collisions et je dois m'y prendre très mal :(

shinigota
shinigota
Niveau 10
06 mars 2014 à 18:06:05

Finalement c'est réglé, j'ai pris les coordonnées au moment de la collision, et juste avant, puis j'ai pu en déduire si la boite venait du haut, du bas, de la droite, de la gauche, et où il fallait glisser :oui:

Sous forums
  • Aide à l'achat Mac
  • Steam Deck
  • Création de sites web
  • Création de Jeux
  • Linux
  • Programmation
  • Internet
  • Macintosh
  • Hardware