Détection de collision Java entre deux objets Shape?
Je voudrais savoir la meilleure façon de savoir si un objet de Forme croise une autre forme.
Actuellement, j'ai la détection de collision dans mon jeu triés tant qu'il implique une Forme d'intersection d'un Rectangle ou vice versa. Le problème que je vais avoir, c'est que la méthode intersects() dans la classe de Forme ne peut prendre un Rectangle ou un Point comme un paramètre, pas une autre Forme. Est-il un moyen efficace de tester si deux objets de Forme se chevauchent quelque sorte?
Une façon, j'ai essayé a l'aide d'une boucle for pour générer une zone de points pour tester si ils étaient dans la forme, puis la construction d'un tableau d'objets de Point d'envoyer à l'autre forme de test, mais cela a considérablement baissé mon framerate à cause de toutes les comparaisons inutiles.
J'ai regardé et regardé quelque chose de similaire ici, mais n'ai rien trouvé de vraiment. Désolé à l'avance si c'est une reprise.
source d'informationauteur Monkeybro10
Vous devez vous connecter pour publier un commentaire.
Pas testé, mais pourquoi pas:
Région met en œuvre la Forme, mais ajoute quelques potentiellement utile méthodes
Vous pouvez également utiliser les limites de la forme elle-même, puis de comparer les limites:
C'est un peu plus agréable pour les yeux.
Même si user2221343 déjà répondu Monkeybro10 la question, j'ai pensé qu'il pourrait être utile, dans certains cas, à savoir, que le contour d'une forme, pourrait jouer un rôle si vous utilisez sa technique décrite:
Par exemple, si vous dessinez deux polygones, la collision de leur ne pas être détecté si elle ne se produit que sur le contour des polygones. Seulement, si les zones qui sont inclus à l'intérieur des polygones contours se chevauchent, la collision est détectée.
Si vous remplissez deux polygones, mais ne pas les attirer, la collision sera détecté, même sur le contour de la zone visible.
J'ai écrit un petit exemple pour montrer ce que je veux dire. Soit dé-commenter le tirage au sort ou de la commande remplir, et la hausse de la deuxième polygone verticalement par un pixel en décommentant la ligne donnée. Exécutez le code et de voir le résultat dans la JFrame. Si le second Polygone est ressuscité, et les deux polygones ne sont visibles que par le "remplissage" de la commande, ils se croisent avec leurs contours et de collision est détecté. Si le second polygone n'est pas ressuscité, et les deux polygones sont visibles par le "tirage" de la commande, ils se croisent avec leurs contours, mais la collision n'est pas détecté:
Si vous pensez que la zone d'intersection est trop cher, vous pouvez faire une vérification de limites:
shapeA.getBounds().coupe(shapeB.getBounds())
Si cela passe, puis de faire de la région se croisent vérifier.