0

I am working on a camera in Pygame.

I used the following code, inspired by a tutorial:

https://www.youtube.com/watch?v=u7LPRqrzry8

The code:

import pygame,sys
from random import randint

pygame.init()

screensize = 1300,600

class CameraGroup(pygame.sprite.Group):
    def __init__(self):
        super().__init__()
        self.display_surface = pygame.display.get_surface()
        self.offset= pygame.math.Vector2()
        self.camera_borders = {'left': 100 , 'right': 100, 'top': 0, 'bottom' : -100}
        l= self.camera_borders['left']
        t= self.camera_borders['top']
        w = self.display_surface.get_size()[0] - (self.camera_borders['left']+ self.camera_borders['right'])
        h= self.display_surface.get_size()[0] - (self.camera_borders['top']+ self.camera_borders['bottom'])
        self.camera_rect = pygame.Rect(l,t,w,h)
        self.ground = pygame.image.load('C:\\Users\\----\\Documents\\Python\\BuildATown\\graphics\\background.jpg').convert_alpha()
        self.ground_rect = self.ground.get_rect(topleft = (0,-300))

    
    def mousecontrol(self):
        mouse = pygame.math.Vector2(pygame.mouse.get_pos())
        mouseoffset = pygame.math.Vector2()
        l_border = self.camera_borders['left']
        r_border = self.camera_borders['top']
        t_border = self.display_surface.get_size()[0] - self.camera_borders['right']
        b_border = self.display_surface.get_size()[1] - self.camera_borders['bottom']

        if t_border < mouse.y < b_border:
            if mouse.x < l_border:
                mouseoffset = mouse.x - l_border
                print("Something changed")
                pygame.mouse.set_pos((l_border, mouse.y))
            if mouse.x > r_border:
                mouseoffset = mouse.x - r_border
                print("Something changed")
                pygame.mouse.set_pos((r_border, mouse.y))
        self.offset += mouseoffset



    def customdraw(self,screen):
        self.mousecontrol()

        ground_offset = self.ground_rect.topleft - self.offset
        self.display_surface.blit(self.ground,ground_offset)
        for sprite in sorted(self.sprites(), key = lambda sprite: sprite.rect.centery):
          offset_pos = sprite.rect.topleft - self.offset
          screen.blit(sprite.image,offset_pos)

        pygame.draw.rect(self.display_surface, 'yellow', self.camera_rect, 5)



class Field(pygame.sprite.Sprite):
    def __init__(self,pos,group):
      super().__init__(group)
      self.image = pygame.image.load('C:\\Users\\-----\\Documents\\Python\\BuildATown\\graphics\\field.png').convert_alpha()
      self.rect = self.image.get_rect(topleft = pos)


screen = pygame.display.set_mode(screensize)
ticktock = pygame.time.Clock()
 
camera = CameraGroup()
for i in range(6):
    x=50+(115*i)
    y=200+(2*i)
    Field((x,y),camera)
    
is_window_open = True

while is_window_open:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            is_window_open = False

    screen.fill("red")
    camera.update()
    camera.customdraw(screen)
    pygame.display.update()

But the Camera won't work! any suggestions? I have tried check if there are any typos and/or indentation errors, but nothing worked. So please do you have any suggestions?

Rabbid76
  • 202,892
  • 27
  • 131
  • 174
Bro Ski
  • 1
  • 1

0 Answers0