Search code examples
pythonpygamescalingpygame-surface

I can't get my background to scale itself down in Pygame, what do I do?


Take a look at "pygame.transform.scale(bg_image, (-500, 600))" below, set it up just like it told me on Pygame's site, so don't know what else to do

import pygame, sys

pygame.init()
clock = pygame.time.Clock()
screen = pygame.display.set_mode((500, 900))
pygame.display.set_caption('Climbing Man')

bg_image = pygame.image.load("/Users/apple/Downloads/Python Projects/Climbing_Game/bckwall.jpg").convert
pygame.transform.scale(bg_image, (-500, 600)) 


def climbing_man():
    pass

while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()
    
    screen.blit(bg_image,(-50,0))
         

    pygame.display.update()
    clock.tick(60)

Solution

  • pygame.transform.scale returns a new Surface with the scaled size. Therefore you have to assign the return value bg_image:

    pygame.transform.scale(bg_image, (-500, 600))

    bg_image = pygame.transform.scale(bg_image, (500, 600)) 
    

    However, you cannot scale to a negative size. If you want to flip an image you have to use pygame.transform.flip():

    bg_image = pygame.transform.scale(bg_image, (500, 600))
    bg_image = pygame.transform.flip(bg_image, True, False) 
    

    In addition, you forgot the parentheses after convert:

    bg_image = pygame.image.load("/Users/apple/Downloads/Python Projects/Climbing_Game/bckwall.jpg").convert

    bg_image = pygame.image.load(
        "/Users/apple/Downloads/Python Projects/Climbing_Game/bckwall.jpg").convert()
    

    Complete code:

    import pygame, sys
    
    pygame.init()
    clock = pygame.time.Clock()
    screen = pygame.display.set_mode((500, 900))
    pygame.display.set_caption('Climbing Man')
    
    bg_image = pygame.image.load(
        "/Users/apple/Downloads/Python Projects/Climbing_Game/bckwall.jpg").convert()
    
    bg_image = pygame.transform.scale(bg_image, (500, 600))
    # bg_image = pygame.transform.flip(bg_image, True, False) # <--- OPTIONAL
    
    
    def climbing_man():
        pass
    
    while True:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                sys.exit()
        
        screen.blit(bg_image,(-50,0))
             
    
        pygame.display.update()
        clock.tick(60)