dvd escribió:Ya que con lo que he visto solo puedo hacer colisiones con rectángulos y eso limita bastante el realismo...
Las colisiones en pygame pueden ser tan complejas como desees, en principio
los grupos detectan colisiones entre cajas, pero esto no siempre tiene que ser
así. Por ejemplo, en el juego de nombre Shaolin tube que modificar este
aspecto de las colisiones para que los golpes entre personajes sean mas
"realistas":
En la imágen puedes observar que el rectángulo de colision del personaje de
pelo azúl es mas pequeño que el rectángulo que representa la imágen. Esta
personalización de las colisiones es solo un ejemplo, se pueden hacer muchas
otras cosas.
Entonces, ¿que puedes hacer para "personalizar" las colisiones de tu juego?.
Hay muchas formas, una podría ser: "crear una nueva función similar a
'spritecollide' pero que verifique colisiones de otra forma'.
Observa el siguiente ejemplo, es la función que utilizo en el juego que mencioné:
- Código: Seleccionar todo
def colision_de_grupos(sprite, group):
crashed = []
spritecollide = sprite.rect_colision.colliderect
for s in group:
if spritecollide(s.rect_colision):
crashed.append(s)
return crashed
Esta función es muy similar a "spritecollide", recibe un sprite y un grupo,
evalúa si existen colisiones y devuelve una lista de todos los elementos que
colisionan con el argumento 'sprite'.
Si quieres otro ejemplo puedes observar el proyecto "PixelPerfect" de John
Eriksson:
http://arainyday.se/projects/python/PixelPerfect/
John también escribe una función similar a 'spritecollide', pero agrega una
rutína que verifica colisiones en base a los píxeles de una imagen (en
realidad, usando una máscara de la imagen).
Saludos.