I was tinkering with PyGame, reading articles, and I came across this weird phenomenon. For some reason, pygame.colliderect returns True
when the two sprites aren't touching.Code:
import pygame
pygame.init()
screen = pygame.display.set_mode((400, 300))
running = True
spriteX = 100
spriteY = 100
spriteVY = 3
clock = pygame.time.Clock()
class Sprite(pygame.sprite.Sprite):
def __init__(self):
super(Sprite, self).__init__()
self.vel = (0, 0)
self.surf = pygame.Surface((100, 200))
self.surf.fill((255, 255, 255))
self.rectangle = self.surf.get_rect()
class Platform(pygame.sprite.Sprite):
def __init__(self):
super(Platform, self).__init__()
self.surf = pygame.Surface((200, 10))
self.surf.fill((142, 212, 25))
self.rectangle = self.surf.get_rect()
on_ground = True
while running:
platform_group = pygame.sprite.Group()
platform_group.add(Platform())
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
if pygame.key.get_pressed()[pygame.K_SPACE]: spriteY -= 10
if pygame.key.get_pressed()[pygame.K_d]: spriteX += 10
if pygame.key.get_pressed()[pygame.K_a]: spriteX -= 10
print((Platform().rectangle.colliderect(Sprite().rectangle)))
screen.fill((0, 0, 0))
if spriteX >= 300:
spriteX = 300
if spriteX <= 0:
spriteX = 0
if not on_ground:
spriteY += spriteVY
spriteVY -= 3
screen.blit(Sprite().surf, ((spriteX, spriteY)))
screen.blit(Platform().surf, ((50, 20)))
pygame.display.flip()
clock.tick(24)