如何与 Pygame 中的列表项进行 colliderect()?

How to colliderect() with an item of a list in Pygame?

我遇到了一个小问题:

*当按下 "SPACE Bar" 时,红色方块在显示器上保持随机生成

问题 如何检测玩家方块何时与红色方块发生碰撞? 可能吗?

代码可能会让您了解我在说什么...

import pygame, sys
from random import randint
from pygame.locals import*

"List the Stores the Squares"
red_square_list = []

gameDisplay_width = 800
gameDisplay_height = 600

pygame.init()
gameDisplay = pygame.display.set_mode((gameDisplay_width, gameDisplay_height))
pygame.display.set_caption("Square-it")
clock = pygame.time.Clock()
red_color = pygame.Color("red")

"White Square"
white_x = 400
white_y = 300
white_width = 10
white_height = 10
white_color = pygame.Color("white")
white = pygame.Rect(white_x, white_y, white_width, white_height)

"Red Squares"
def create_red_square(x, y):
    red_width = 10
    red_height = 10
    red = pygame.Rect(x, y, red_width, red_height)
    return red

while True:

    clock.tick(60)
    gameDisplay.fill((0, 20, 5))
    gameDisplay.fill(white_color, white)

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
           sys.exit()

    for each in red_square_list:
        gameDisplay.fill(red_color, each)

    pygame.display.update()

    '''White Square Movement'''
    keys = pygame.key.get_pressed()
    if keys[K_LEFT]:
        white.left = white.left - 4

    if keys[K_RIGHT]:
        white.right = white.right + 4

    if keys[K_UP]:
        white.top = white.top - 4

    if keys[K_DOWN]:
        white.bottom = white.bottom + 4

    "when Space key Pressed, Spawns red Squares"
    if keys[K_SPACE]:
        x = randint(0, gameDisplay_width)
        y = randint(0, gameDisplay_height)
        red_square_list.append(create_red_square(x, y))

如果你用红色方块创建一个组,你可以使用 pygame.sprite.spritecollideany()

检查玩家方块和红色方块之间的碰撞

这涉及为玩家方块和红色方块创建精灵 类,以及要添加的红色方块组。我更新的代码如下,当玩家方块与任何红色方块发生碰撞时,它会在屏幕上打印碰撞,您可以在 checkCollision 函数中处理碰撞。

import pygame, sys
from random import randint
from pygame.locals import*

"List the Stores the Squares"
red_square_list = []

gameDisplay_width = 800
gameDisplay_height = 600

pygame.init()
gameDisplay = pygame.display.set_mode((gameDisplay_width, gameDisplay_height))
pygame.display.set_caption("Square-it")
clock = pygame.time.Clock()
red_color = pygame.Color("red")

"White Square"
white_x = 400
white_y = 300
white_width = 10
white_height = 10
white_color = pygame.Color("white")

redSquares = pygame.sprite.Group()

class playerSquare(pygame.sprite.Sprite):
    def __init__(self, x, y, width, height):
        pygame.sprite.Sprite.__init__(self)
        self.image = pygame.Surface([width,height])
        self.image.fill(white_color)

        self.rect = self.image.get_rect()
        self.rect.x = x
        self.rect.y = y

        pygame.draw.rect(self.image, white_color, self.rect)

white = playerSquare(white_x, white_y, white_width, white_height)

class RedSquare(pygame.sprite.Sprite):
    def __init__(self, x, y, width, height):
        pygame.sprite.Sprite.__init__(self)
        self.image = pygame.Surface([width,height])
        self.image.fill(red_color)

        self.rect = self.image.get_rect()
        self.rect.x = x
        self.rect.y = y

        pygame.draw.rect(self.image, red_color, self.rect)

"Red Squares"
def create_red_square(x, y):
    red_width = 10
    red_height = 10
    red = RedSquare(x, y, 10, 10)
    redSquares.add(red)
    return red

def checkCollision():
    if pygame.sprite.spritecollideany(white, redSquares) != None:
        print('collision')
        return True
    return False

while True:
    clock.tick(60)
    gameDisplay.fill((0, 20, 5))
    gameDisplay.fill(white_color, white)

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
           sys.exit()

    for each in red_square_list:
        gameDisplay.fill(red_color, each)

    pygame.display.update()

    '''White Square Movement'''
    keys = pygame.key.get_pressed()
    if keys[K_LEFT]:
        white.rect.x = white.rect.x - 4

    if keys[K_RIGHT]:
        white.rect.x = white.rect.x + 4

    if keys[K_UP]:
        white.rect.y = white.rect.y - 4

    if keys[K_DOWN]:
        white.rect.y = white.rect.y + 4

    "when Space key Pressed, Spawns red Squares"
    if keys[K_SPACE]:
        x = randint(0, gameDisplay_width)
        y = randint(0, gameDisplay_height)
        red_square_list.append(create_red_square(x, y))

    checkCollision()

引用:

How to use sprite groups in pygame

http://www.101computing.net/creating-sprites-using-pygame/

https://www.pygame.org/docs/ref/sprite.html