Col·lisions =========== Segons el diccionari, una `col·lisió `_ és un encontre de dos cossos que topen o col·lideixen. Per tal que dos cossos topin, cal que almenys un d'ells es mogui. Quan desenvolupem videojocs en `Pygame `_, els elements del joc que es mouen, i que poden col·lidir, normalment són *sprites*. Els *sprites* són objectes que poden canviar la seva imatge gràfica, o la seva posició a la pantalla, o totes dues coses alhora. A més de la classe :py:class:`~pygame.sprite.Sprite`, el mòdul :py:mod:`pygame.sprite` proporciona la classe :py:class:`~pygame.sprite.Group`. Pygame permet detectar col·lisions entre sprites o grups de sprites de :py:func:`diferents maneres `: * :py:func:`A nivell de rectangle `: dos sprites col·lideixen si els seus rectangles (caixes contenidores) no són disjunts. Pygame també admet comprovar la col·lisió amb els rectangles escalats amb un cert ratio. * :py:func:`A nivell de cercle ` (contenidor o no): es comprova si els cercles que contenen els sprites se sobreposen. Pygame també admet comprovar la col·lisió amb els cercles escalats amb un cert ratio. * :py:func:`A nivell de píxel `: a cada sprite se li associada una `màscara de bits `__; dos sprites col·lideixen si les seves màscares tenen algun bit actiu actiu de la mateixa posició. Val més que els sprites tinguin un atribut *mask* amb la màscara de bits de pygame precalculada (vegeu el mòdul :py:mod:`pygame.mask`), per exemple a partir dels seus píxels transparents (vegeu :doc:`../Color,_imatges_i_transparència/index`). L'efecte *tunneling* -------------------- Com que en un videojoc es calculen el moviment dels objectes de forma discreta, típicament a cada fotograma, pot ocòrrer que no es detectin les col·lisions de forma correcta. Posem per cas que en un fotograma una bala està a la dreta d'una paret, es calcula la seva nova posició per al següent fotograma i resulta estar totalment a l'esquerra, perquè té una velocitat alta (i la paret és prou prima). Aquest efecte es coneix com a *tunneling*. Hi ha diverses maneres d'evitar-lo (vegeu `aquesta pàgina `__); per exemple, es pot calcular la col·lisió no basant-se en la seva posició sinó en la trajectoria escombrada entre els dos fotogrames. Però potser sigui millor utilitzar un :doc:`motor de física <../Motors_de_física/index>`...