I have been slowly expanding this program as I learn more about python and pygame and I can't figure out collisions. My ground class is an image that I have used "convert_alpha()" on so I put a pygame mask on it to try and check for collisions between the player and the ground. There are holes in the image so the player could fall if the collision isn't happening. Sorry if it's long but I figured I'd post the whole thing.
The current method I am trying is in the while loop at the bottom.
The error message is this: AttributeError: 'Player' object has no attribute 'sprite'
import pygame
from sys import exit
class Player(pygame.sprite.Sprite):
def __init__(self,pos,group):
super().__init__(group)
self.surface = pygame.image.load('graphics/Player/player_stand.png').convert_alpha()
self.rect = self.surface.get_rect(center = pos)
self.mask = pygame.mask.from_surface(self.surface)
self.direction = pygame.math.Vector2()
self.speed = 5
self.player_gravity = 0
def input(self):
keys = pygame.key.get_pressed()
if keys[pygame.K_d]:
self.direction.x = 1
elif keys[pygame.K_a]:
self.direction.x = -1
else:
self.direction.x = 0
if keys[pygame.K_SPACE] and self.rect.bottom >= 400:
self.player_gravity = -14
self.player_gravity += 1
self.rect.y += self.player_gravity
if self.rect.bottom >= 400: self.rect.bottom = 400
def update(self):
self.input()
self.rect.center += self.direction * self.speed
class Ground(pygame.sprite.Sprite):
def __init__(self,group):
super().__init__(group)
self.image = pygame.image.load('graphics/test2.png').convert_alpha()
self.surface = pygame.transform.scale(self.image,(4000,600))
self.rect = self.surface.get_rect(topleft = (0,0))
self.mask = pygame.mask.from_surface(self.image)
class CameraGroup(pygame.sprite.Group):
def __init__(self):
super().__init__()
self.display_surface = pygame.display.get_surface()
# camera offset
self.offset = pygame.math.Vector2()
self.half_w = self.display_surface.get_size()[0] // 2
def center_target_camera(self,target):
self.offset.x = target.rect.centerx - self.half_w
def custom_draw(self,player):
self.center_target_camera(player)
ground_offset = ground.rect.topleft - self.offset
self.display_surface.blit(ground.surface,ground_offset)
for sprite in sorted(self.sprites(),key = lambda sprite: sprite.rect.topleft):
offset_pos = sprite.rect.topleft - self.offset
self.display_surface.blit(sprite.surface,offset_pos)
pygame.init()
screen = pygame.display.set_mode((1200,600))
clock = pygame.time.Clock()
camera_group = CameraGroup()
player = Player((600,400),camera_group)
ground = Ground(camera_group)
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
exit()
screen.fill('#2C1029')
camera_group.update()
camera_group.custom_draw(player)
if pygame.sprite.spritecollide(player.sprite,ground,False,pygame.sprite.collide_mask):
print("it works")
pygame.display.update()
clock.tick(60)