Hi, I'm making a maze game and I need to make collisions between the player and the edges of the maze. What happens is that when they collide the rectangles disappear. Could you tell me what's going on? Thanks in advance.
# -*- coding: utf-8 -*
import pygame,sys
from pygame.locals import *
from random import randint
ancho = 700
alto = 640
negro = (0,0,0)
blanco = (255,255,255)
class Stanly(pygame.sprite.Sprite):
def __init__(self):
pygame.sprite.Sprite.__init__(self)
self.image = pygame.image.load("sprites/Stanly.png")
self.rect = self.image.get_rect()
self.rect.centerx = 50
self.rect.centery = 580
self.vel = 1
def update(self):
keys = pygame.key.get_pressed()
if keys[K_DOWN]:
self.rect.y += self.vel
if self.rect.bottom > 640:
self.rect.bottom = 640
if keys[K_UP]:
self.rect.y -= self.vel
if self.rect.top < 0:
self.rect.top = 0
if keys[K_RIGHT]:
self.rect.x += self.vel
if self.rect.right > 700:
self.rect.right = 700
if keys[K_LEFT]:
self.rect.x -= self.vel
if self.rect.left < 0:
self.rect.left = 0
class rectU(pygame.sprite.Sprite):
def __init__(self):
pygame.sprite.Sprite.__init__(self)
self.image = pygame.image.load("sprites/ud.png")
self.rect = self.image.get_rect()
self.rect.left = 0
self.rect.top = 0
class rectD(pygame.sprite.Sprite):
def __init__(self):
pygame.sprite.Sprite.__init__(self)
self.image = pygame.image.load("sprites/ud.png")
self.rect = self.image.get_rect()
self.rect.left = 0
self.rect.top = 608
class rectL(pygame.sprite.Sprite):
def __init__(self):
pygame.sprite.Sprite.__init__(self)
self.image = pygame.image.load("sprites/lr.png")
self.rect = self.image.get_rect()
self.rect.left = 0
self.rect.top = 0
class rectR(pygame.sprite.Sprite):
def __init__(self):
pygame.sprite.Sprite.__init__(self)
self.image = pygame.image.load("sprites/lr.png")
self.rect = self.image.get_rect()
self.rect.right = 700
self.rect.top = 0
all_sprites = pygame.sprite.Group()
rects = pygame.sprite.Group()
Mrects = pygame.sprite.Group()
players = pygame.sprite.Group()
def Game():
pygame.init()
pygame.key.set_repeat(1,25)
ventana = pygame.display.set_mode((ancho, alto))
pygame.display.set_caption("Game")
player = Stanly()
RectU = rectU()
RectD = rectD()
RectL = rectL()
RectR = rectR()
all_sprites.add(player)
all_sprites.add(RectU)
all_sprites.add(RectD)
all_sprites.add(RectL)
all_sprites.add(RectR)
rects.add(RectU)
rects.add(RectD)
rects.add(RectL)
rects.add(RectR)
players.add(player)
while True:
for event in pygame.event.get():
if event.type == QUIT:
pygame.quit()
sys.exit()
colls = pygame.sprite.groupcollide(players, rects, False, True)
for player, rects_ in colls.items():
player.rect.centerx = 50
player.rect.centery = 580
# Actualizamos todos los sprites del juego
all_sprites.update()
ventana.fill(negro)
# Dibujamos todos los sprites
all_sprites.draw(ventana)
pygame.display.flip()
pygame.quit()
Game()
The problem is in the line:
The method
pygame.sprite.groupcollide
receives the following arguments:As it has the argument
dokill2
howTrue
the sprites of the grouprects
are automatically "killed" when there is a collision with those of the first group. That is, they are automatically removed from the group when they collide.Just do :