Comment détecter une collision entre un sprite et une forme générée par l'utilisateur.
Par exemple. Il y a des objets sur l'écran. L'utilisateur prend son doigt et dessine une forme de cercle autour d'un objet (la règle de sélection consiste à peindre un cercle autour du sprite, mais les formes de peinture peuvent être diverses). J'ai besoin de détecter quel objet sélectionné, tout comme:
collision-detection
Huwell
la source
la source
Réponses:
Si la forme est dessinée principalement avec des segments de ligne de l'utilisateur (ou des courbes de Bézier avec des points de contrôle), vous pouvez implémenter un algorithme assez largement utilisé connu sous le nom de Théorie de l'axe de séparation . En termes simples: s'il existe un axe (unité-vecteur représentant une direction) sur lequel les formes ne se chevauchent pas (leurs valeurs projetées n'entraînent pas de différence positive), les objets ne se chevauchent pas. Je l'ai utilisé dans le passé et cela a fonctionné comme un charme.
la source
Si la forme est dessinée à la main comme dans Crayon Physics , vous pouvez tenir un tableau de lignes droites et vérifier les collisions avec chacune d'elles. Malgré les lignes droites, vous pouvez utiliser des courbes de Bézier ou quelque chose comme ça.
la source
Les approches dépendent des structures de données que vous choisissez, qu'il s'agisse de bitmaps ou de vecteurs.
La première approche peut gérer des formes complexes arbitraires, est simple à implémenter mais utilise plus de mémoire. En fait, vous pouvez réduire la surcharge de la mémoire en utilisant la compression et l'accélérer en utilisant des structures de données hiérarchiques (octrees) ...
La seconde approche n'est pas si simple à mettre en œuvre mais utilise plus de puissance de traitement.
Dans chaque cas, mesurez si cela est important. J'essaierais de faire le premier car il est plus simple à mettre en œuvre. Bonne chance. :)
la source