你必须检测所有雨滴与路面的碰撞。
添加雨滴组:
rain = pygame.sprite.Group()
将每个雨滴添加到组中:
done = False
while not done:
r = Square(random.randint(0, 747), 0, 3, 7, 0, 5, (137, 200, 230))
allspriteslist.add(r)
rain.add(r)
如果掉落到地面,则将其移除,方法是pygame.sprite.Sprite.kill() https://www.pygame.org/docs/ref/sprite.html#pygame.sprite.Sprite.kill:
done = False
while not done:
# [...]
for r in rain:
if r.rect.colliderect(pavement.rect):
r.kill()
去除雨滴可以通过使用来简化pygame.sprite.spritecollide() https://www.pygame.org/docs/ref/sprite.html#pygame.sprite.spritecollide并经过True
论点dokill
:
done = False
while not done:
# [...]
pygame.sprite.spritecollide(pavement, rain, True)
完整示例代码:
import pygame
import random
class Square(pygame.sprite.Sprite):
def __init__(self, x, y, size1, size2, speedx, speedy, colour):
super().__init__()
self.image = pygame.Surface([size1, size2])
self.image.fill(colour)
self.speedx = speedx
self.speedy = speedy
self.rect=self.image.get_rect()
self.rect.x=x
self.rect.y=y
def update(self):
square_colour = (random.randint(0,255), random.randint(0,255), random.randint(0,255))
self.rect.x = self.rect.x + self.speedx
self.rect.y = self.rect.y + self.speedy
my_square = Square(0, 705, 20, 30, 1, 0, (0, 0, 0))
pavement = Square(0, 735, 750, 15, 0 , 0, (100, 100, 100))
allspriteslist = pygame.sprite.Group()
allspriteslist.add(my_square)
allspriteslist.add(pavement)
rain = pygame.sprite.Group()
pygame.init()
screen = pygame.display.set_mode([750,750])
pygame.display.set_caption('Snake Example')
clock = pygame.time.Clock()
background_colour = (150, 150, 150)
done = False
while not done:
r = Square(random.randint(0, 747), 0, 3, 7, 0, 5, (137, 200, 230))
allspriteslist.add(r)
rain.add(r)
for event in pygame.event.get():
if event.type == pygame.QUIT:
done = True
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_q:
done = True
if my_square.rect.x > 750:
my_square.rect.x = - 10
if my_square.rect.x < - 50:
my_square.rect.x = 800
pygame.sprite.spritecollide(pavement, rain, True)
screen.fill(background_colour)
allspriteslist.draw(screen)
allspriteslist.update()
pygame.display.flip()