Buenas. Soy yo de nuevo, siento ser pesado, pero es que estoy atascado en algo. Quizás parezca simple, no lo sé, pero llevo horas y no hay manera.
Me gustaría saber la manera de hacer que el sprite de jugador, cuando colisione son un obstaculo, no se mueva, pero cuando cambie de dirección respecto al elemento colisionador (obstaculo), se mueva, no sé si me explico.
Ej.: una casa, cuando chocas con ella se queda quieto, pero cuando vas hacia el lado contrario, se mueve. Eso es lo que quiero conseguir.
El código que realice, que es obvio que no funciona, es el siguiente:
obstacles_list = []
for tile_obj in backGround.tmx_data.objects:
obst = Obstacle(tile_obj.x, tile_obj.y, tile_obj.width, tile_obj.height)
obstacles_list.append(obst)
for obstacle in obstacles_list:
if obstacle.rect.colliderect(player.rect):
if orientations[0] == orientations[1]:
vx=0
vy=0
player.move(vx,vy)
Esto lo que hace es que cuando pulso dos veces sobre la misma dirección, si colisiona, se queda parado, y luego se puede mover. Pero si por ejemplo voy hacia abajo (0), y luego hacia la izquierda (3) y debiera colisionar, no colisiona, y pasa por encima de las casas.
En "orientations" tengo una lista donde pongo las dos últimas posiciones usadas: 0 (abajo), 1 (arriba), 2 (derecha), 3 (izquierda)
Para ello, cada vez que pulso un botón, hago lo siguiente:
orientations.remove(orientations[0])
orientations.append(player.orientation)
Así se guardan las dos últimas posiciones.
Gracias de antemano