Se debe implementar un sistema de colisiones extendiendo la funcionalidad de la función entity_physics() de manera que los muros del nivel efectivamente detengan a la entidad de manera correcta.
Esto significa que:
No se sume directamente (vx,vy) a la posición de la entidad si eso resulta que esta termine total o parcialmente atrapada en un muro. La entidad debe quedar tocando el muro pero no introducirse en él.
Al momento de chocar con un muro, la componente perpendicular al lado del muro con que se está chocando de la velocidad (vx,vy) sea sustraída. Esto significa que si una entidad se está moviendo en diagonal y choca con el lado vertical de un muro, pase a moverse sólo verticalmente (¡Que no quede incrustada!).
Se debe implementar un sistema de colisiones extendiendo la funcionalidad de la función
entity_physics()
de manera que los muros del nivel efectivamente detengan a la entidad de manera correcta. Esto significa que:Es fácil hacer sistemas de colisión con errores, este hilo de SO le puede ser de ayuda para hacer colisiones círculo-rectángulo: https://stackoverflow.com/questions/45370692/circle-rectangle-collision-response
Si se le hace muy complicado, puede considerar la entidad como un cuadrado para fines de colisiones con muros; y resolver utilizando otro método para colisiones rectángulo-rectángulo, como el que se muestra en este video: https://www.youtube.com/watch?v=VpSWuywFlC8 o en este tutorial de pygame (con python2): https://www.pygame.org/project-Rect+Collision+Response-1061-.html
También puede asumir que el diámetro de las entidades siempre será menor o igual al
TILE_SIZE
.En caso de basarse en otra referencia recuerde indicarla en su entrega.