2017-09-26 18 views
2

J'ai des images-objets représentant deux polygones ci-dessous. Ces polygones représentent vaguement la zone d'image-objet. Ce que je veux faire est d'utiliser ces polygones pour détecter le chevauchement (ou la collision) des sprites. Cependant, le chevauchement devrait être valide à l'intérieur du carré vert. (Ce qui est un jeu de puzzle, ce que je suis en train de mettre en œuvre est claquant des pièces de puzzle quand ils sont rapprochés)Détection de chevauchement sur une partie de l'image-objet dans Libgdx

J'ai essayé Intersector.overlapConvexPolygons(adjacentPiece.polygon, currentPiece.polygon); mais celui-ci détecte des chevauchements pour le polygone entier.

Toutes les choses intelligentes que je peux faire ici pour détecter le chevauchement.

enter image description here

enter image description here

+0

Vous pouvez simplement utiliser la case 2d pour les collisions. –

Répondre

1

Je pense que votre approche pourrait être trop compliquer. Si vous avez besoin que vos pièces de puzzle se cognent les unes aux autres, vous pouvez garder vos limites physiques, mais si ce n'est pas le cas, vous pouvez les supprimer entièrement.

De toute façon, pour détecter si deux pièces doivent s'encliqueter, vous pouvez approximer chaque pièce par un point à peu près au centre de chacun des quatre côtés de base de la pièce. Pour tester si des pièces sont suffisamment proches pour s'emboîter, il suffit de mesurer la distance entre les points sur les côtés des deux pièces et de voir si elle est inférieure à une certaine valeur de seuil que vous souhaitez utiliser. S'il s'agit d'un jeu de puzzle typique, il vous suffira de vérifier cela lorsque le joueur relâchera un morceau, donc si le processus de force brute est long à travers toutes les correspondances potentielles, il ne sera pas vraiment perceptible parce que ce n'est pas fait pendant que le joueur traîne des pièces.

+0

Merci pour cela. S'il vous plaît voir la nouvelle illustration. C'est ce que tu veux dire? Sur la base de cette image, nous mesurons la distance Y et la comparons avec un seuil. Qu'en est-il de X? – pats

+0

Pas exactement. Je veux dire que vous avez quatre points pour chaque pièce du puzzle, un au milieu de chacun des quatre côtés. Pas un seul point au centre de toute la pièce. – Tenfour04

+0

Merci, je vais essayer. BTW J'ai créé des polygones pour créer une zone tactile pour les pièces de puzzle. Connaissez-vous une meilleure approche pour cela. Voici la question https://stackoverflow.com/questions/46292589/limit-touch-area-to-texture-area-in-libgdx/46293793#46293793 – pats

1

Si toutes vos pièces de puzzle sont de taille standard, vous pouvez utiliser simplement des carrés normaux pour chaque pièce de puzzle. Le carré utilisé pour définir la forme sera à mi-chemin entre la partie solide de la pièce de puzzle et les pièces extrudées.

De votre image j'ai appliqué les carrés aux pièces montrées.

enter image description here

+0

Merci, je continue sur ce chemin. BTW savez-vous un moyen de créer des sprites morceau de puzzle à partir d'une image carrée complète. Actuellement, je crée dynamiquement des images de pièces de puzzle à partir de méthodes android et les charge sur libgdx. Il y a des problèmes de traduction. Question complète https://stackoverflow.com/questions/46271718/split-a-texture-into-puzzle-pieces-in-libgdx?noredirect=1#comment79521703_46271718 – pats