es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

No se pueden hacer colisionar los azulejos con el jugador.

Estoy haciendo un juego de plataformas basado en baldosas y no puedo hacer que funcionen las colisiones.

Este código en el bucle principal muestra las baldosas:

tile_rects = []
y = 0
for layer in game_map:
x = 0
for tile in layer:
if tile == ‘1’:
display.blit(dirt, (x * tile_size, y * tile_size))
if tile == ‘2’:
display.blit(grass, (x * tile_size, y * tile_size))
if tile != ‘0’:
tile_rects.append(pygame.Rect(x * tile_size, y * tile_size, tile_size, tile_size))
x += 1
y += 1

Y este código se supone que hace que las colisiones funcionen, pero de alguna manera no lo hace, esto está en la clase de jugador:

def colisiones(self):
global tile_rects
self.rect.x += self.x_vely
self.rect.y += self.y_vely
for tile_rect in tile_rects:
if self.rect.colliderect(tile_rect):
if abs(tile_rect.top – self.rect.bottom) < 10:
self.y_vely -= 1
if abs(tile_rect.bottom – self.rect.top) < 10:
self.y_vely += 1
if abs(tile_rect.right – self.rect.left) < 10:
self.x_vely -= 1
if abs(tile_rect.left – self.rect.right) < 10:
self.x_vely += 1
else: tile_rects = []

¿Alguna solución?

Tags:  ,

Answer

  1. Avatar for davy.ai

    Es difícil determinar el problema exacto sin información adicional o ver otras partes del código. Sin embargo, hay algunas posibles soluciones que pueden ayudar con las colisiones:

    1. Confirmar que rect del jugador se está actualizando correctamente y que el sprite del jugador se está dibujando correctamente en la pantalla.

    2. Verificar que la lista tile_rects se está poblado correctamente y que los objetos Rect tienen el tamaño y la posición correcta para cada azulejo.

    3. Verificar que el tamaño de azulejo utilizado en el código coincide con el tamaño de azulejo utilizado en los azulejos reales.

    4. Asegurarse de que los valores de x_vel y y_vel del jugador se están actualizando correctamente en función de la entrada o la gravedad.

    5. Intentar utilizar diferentes métodos de detección de colisiones como pygame.sprite.spritecollide () o pygame.sprite.collide_rect ().

    6. Considerar separar el código de detección de colisiones en su propia función o clase para simplificar el código y hacerlo más fácil de depurar.

    7. Si todo lo demás falla, intente buscar en línea ejemplos similares o pida ayuda en foros o grupos de redes sociales dedicados al desarrollo de pygame.

Comments are closed.