Mar-22-2020, 12:01 PM
Just tile it.
import os import pygame class DisplayEngine: @staticmethod def center_screen(): os.environ['SDL_VIDEO_CENTERED'] = '1' def __init__(self, caption, width, height, flags=0): pygame.display.set_caption(caption) self.surface = pygame.display.set_mode((width, height), flags) self.rect = self.surface.get_rect() self.clock = pygame.time.Clock() self.running = False self.delta = 0 self.fps = 60 def idle(self): self.delta = self.clock.tick(self.fps) def quit(self): self.running = False class Scene: def __init__(self, display_engine): self.display_engine = display_engine self.bg = pygame.Surface((800, 800)) self.bg.fill(pygame.Color('gray5')) pygame.draw.line(self.bg, pygame.Color('dodgerblue'), (0, 10), (800, 10)) pygame.draw.line(self.bg, pygame.Color('dodgerblue'), (0, 400), (800, 400), 2) pygame.draw.line(self.bg, pygame.Color('dodgerblue'), (0, 750), (800, 750)) pygame.draw.line(self.bg, pygame.Color('firebrick'), (20, 0), (20, 800), 3) pygame.draw.line(self.bg, pygame.Color('firebrick'), (300, 0), (300, 800)) self.camera = pygame.Vector2() self.camera_speed = 140 / 1000 # Area you are looking for. def tile_image(self, surface, image): width, height = self.display_engine.rect.size i_width, i_height = image.get_size() camera_x = int(self.camera.x % i_width) camera_y = int(self.camera.y % i_height) for x in range(-camera_x, width, i_width): for y in range(-camera_y, height, i_height): surface.blit(image, (x, y)) def mainloop(self): self.display_engine.running = True while self.display_engine.running: for event in pygame.event.get(): if event.type == pygame.QUIT: self.display_engine.quit() keys = pygame.key.get_pressed() if keys[pygame.K_w]: self.camera.y -= self.camera_speed * self.display_engine.delta if keys[pygame.K_s]: self.camera.y += self.camera_speed * self.display_engine.delta if keys[pygame.K_a]: self.camera.x -= self.camera_speed * self.display_engine.delta if keys[pygame.K_d]: self.camera.x += self.camera_speed * self.display_engine.delta surface = self.display_engine.surface surface.fill(pygame.Color("black")) self.tile_image(surface, self.bg) pygame.display.flip() self.display_engine.idle() if __name__ == '__main__': pygame.init() DisplayEngine.center_screen() display_engine = DisplayEngine("Moving Background", 600, 600) scene = Scene(display_engine) scene.mainloop()
99 percent of computer problems exists between chair and keyboard.