Est-il possible de faire une collision parfaite pixel dans une application basée sur la vue? J'ai cherché des codes d'exemples mais sans aucune chance ... Vous pouvez également utiliser des bitmaps colorés pour représenter une collision pour une certaine couleur?Pixel collision parfaite?
Répondre
Vous pouvez. Il semble que c'est plus facile si vous utilisez un CGImage cependant.
Vous pouvez créer un tableau booléen 2D pour lire les valeurs de pixels afin de construire une grille de correspondance (en gros une matrice 2x2), puis la stocker avec votre classe d'objets de jeu.
Vous auriez besoin d'un accès direct aux données de pixels pour la CGImage (the code is here) puis utiliser une boucle, la lecture des données de pixels dans le tableau des valeurs booléennes:
BOOL pixelGrid[xPixels][yPixels];
for (int i = 0; i < xPixels; i++) {
for (int j = 0; j < yPixels; j++) {
pixelGrid[i][j] = pixelIsOpaque(i, j);
}
}
La méthode pixelIsOpaque() ci-dessus, évidemment n » t existe, remplacez simplement par ce que l'exemple de code vous donne pour extraire la valeur du pixel. Vous stockez si un pixel existe (vérifiez en fait si le pixel est l'opacité> 0)
Une fois que vous avez cette grille (générez-la au début de votre programme une fois et stockez le tableau 2D résultant dans l'objet de jeu) alors vous besoin d'une méthode de détection de collision.
BOOL detectCollision(BOOL *pixelGrid1, BOOL *pixelGrid2) {
BOOL result = NO;
for (int i = 0; i < xPixels; i++) {
for (int j = 0; j < yPixels; j++) {
if (pixelGrid1[i][j].opacity != 0 && pixelGrid2[i][j].opacity != 0]) {
result = YES; break;
}
}
}
return result;
}
Je viens d'écrire ce code à la volée, donc je ne peux pas être à 100% compilable mais je l'espère vous donne l'idée. Vous pouvez facilement modifier cela, mais au lieu de comparer l'opacité, comparez simplement par rapport à la valeur de couleur de pixel, see here pour obtenir les données de couleur brutes.
- 1. C# - coloration parfaite de la syntaxe
- 2. Détection de collision XNA
- 3. Wicket & jQuery Chevauchement/Collision
- 4. groupes de collision Box2D
- 5. Pixel cintreuse Blanc Transparent
- 6. Silverlight Pixel Api
- 7. Pixel à Centimètre?
- 8. Drawit vs Pixel
- 9. Collision de contrôle dans winforms
- 10. Expression régulière: comment puis-je imposer une chaîne parfaite?
- 11. Changer la couleur d'un pixel
- 12. Algorithme de dessin de pixel
- 13. Règle HR rend blanc pixel
- 14. Silverlight graphiques pixel position latérale?
- 15. Comprendre la faiblesse de collision sha-1
- 16. C++ namespace collision avec gtest et stimuler
- 17. méthodes détection de collision en C++
- 18. détection de collision avec beaucoup d'objets
- 19. détection de collision Cercle-rectangle terminé exampe
- 20. Comment modifier les données de pixel après avoir obtenu les informations de pixel
- 21. pixel de suivi ou javascript inclus?
- 22. formulaire de sélection de pixel winform vb.net
- 23. Comment lire la couleur d'un pixel d'écran
- 24. Actionscript 3: Obtenir l'objet d'affichage au pixel
- 25. NSString longueur de pixel de texte
- 26. jQuery - IE8 - fadeIn()/fadeOut() pixel décalage
- 27. .wmf/WMF fiable Pixel conversion d'image basée
- 28. Redimensionnement GDI + pour le zoom Pixel
- 29. iphone problème de détection de collision en utilisant chipmunk
- 30. Animation Silverlight et questions de détection de collision
+1 pour une excellente information. Je me suis vraiment intéressé aux collisions parfaites en pixels. Je vais essayer de voir si ça marche ce week-end. Je suis juste préoccupé par la performance, mais c'est un tout autre problème qui peut être abordé plus tard. – Tovi7