Pygame Sprite Collision 只给出 True

Pygame Sprite Collision only giving True

我想要代码来检测岩石和玩家之间的碰撞。但不知何故,该程序始终检测到碰撞。我尝试调试它,并尝试寻找解决此问题的方法,但没有成功。这只是我还是这很常见。

也许是长方形的大小?当我尽我所能时,问题仍然存在。自己尝试代码。帮帮我!

请回答!

代码:

from random import *
import time
import pygame
from pygame.locals import *
import sys
pygame.init()

class character(pygame.sprite.Sprite):
    def __init__(self, x, y, image):
        self.x = x
        self.y = y
        self.image = image
        self.rect = self.image.get_rect();

    def checkCollision(sprite1, sprite2):
        if pygame.sprite.collide_rect(sprite1, sprite2):
            print(pygame.sprite.collide_rect(sprite1, sprite2))

pressed_left = False
pressed_right = False
pressed_up = False
pressed_down = False
x_speed = 1
y_speed = 1
clock = pygame.time.Clock()

screen = pygame.display.set_mode((640, 480))

playerskin = pygame.image.load('Player1_Skin.png').convert_alpha()
rockskin = pygame.image.load('Player2_Skin.png').convert_alpha()

player = character(20, 20, playerskin)
rock = character(400, 400, rockskin)

while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT: 
            sys.exit()        
        elif event.type == pygame.KEYDOWN:
            if event.key == pygame.K_LEFT:
                pressed_left = True
            elif event.key == pygame.K_RIGHT:
                pressed_right = True
            elif event.key == pygame.K_UP:
                pressed_up = True
            elif event.key == pygame.K_DOWN:
                pressed_down = True
        elif event.type == pygame.KEYUP:
            if event.key == pygame.K_LEFT:
                pressed_left = False
            elif event.key == pygame.K_RIGHT:
                pressed_right = False
            elif event.key == pygame.K_UP:
                pressed_up = False
            elif event.key == pygame.K_DOWN:
                pressed_down = False

    if pressed_left:
        player.x -= x_speed
    if pressed_right:
        player.x += x_speed
    if pressed_up:
        player.y -= y_speed
    if pressed_down:
        player.y += y_speed

    screen.fill((0, 255, 0))

    screen.blit(player.image, (player.x, player.y))
    screen.blit(rock.image, (rock.x, rock.y))

    print(bool(pygame.sprite.collide_rect(rock, player)))
    #rock.checkCollision(player)

    pygame.display.update()
    clock.tick(60)

您的矩形没有移动,因为它们是基于图像的,当您将它们移到屏幕上时,您正在偏移图像。

您需要在初始化时复制图像矩形(您已经在这样做),然后使用rect.move表示每个实体位置的边界框。