Perso j´utilise plutôt un mix entre boites englobantes et tests plus précis au pixel ensuite. Mais je n´utilise pas le cadre du sprite tel quel car souvent les sprites sont plus petits que la taille du bloc. Donc je prends un cadre qui colle le mieux au sprite. Ca ne sera donc pas du 16*16, 32*32 ou autre mais plutot quelqueqchose du genre 12*14, 28*24 etc...
Ensuite je mémorise quel côté de cette boite entre en collision et je commence à tester les pixels en partant de coin là.
Exemple : si c´est le côté droit du personnage qui entre en collision avec un bloc du décor (donc son côté gauche pour le bloc décor) je teste les pixels du perso de la droite vers la gauche et les pixels du décor du la gauche vers la droite ... Côté haut -> haut vers le bas du perso et bas vers le haut du décor etc..
Une optimisation assez rapide au test de pixels est d´utiliser des masques de bits (0 pour vide et 1 pour plein) et faire les tests ligne par ligne. Par exemple pour un sprite 32x32 on prend des unsigned long sur 32 bits ca permet de coder le sprite sur 32 ulong. Et en testant :
// le perso va vers le haut
if ( (maskPerso[i] & maskDecor[height-1-i]) != 0)
{
//il y a collision (on arrête la boucle)
}
enfin il y a 36 méthodes différentes, à chacun d´a
dapter et prendre celle qui lui convient le mieux. Certains jeux 2D n´ont même pas besoin de test si précis, si les sprites sont fait de manière à occuper tout un bloc les simples bounding box sont suffisantes.