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?