由于某种原因,碰撞器无法工作,雨水穿过人行道。这真的很烦人,因为所有这些未使用的精灵都会产生大量的延迟
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)
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)
for event in pygame.event.get():
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
if r.rect.colliderect(pavement.rect):
allspriteslist.remove(r)
screen.fill(background_colour)
allspriteslist.draw(screen)
allspriteslist.update()
pygame.display.flip()
你必须检测所有雨滴与人行道的碰撞
为雨滴添加一个组:
将每个雨滴添加到组中:
如果落在地上,通过pygame.sprite.Sprite.kill()将其移除:
通过使用^{} 并将
True
传递给参数dokill
,可以简化删除雨滴的过程:完整的示例代码:
相关问题 更多 >
编程相关推荐