Back

Explore Courses Blog Tutorials Interview Questions
0 votes
4 views
in Python by (16.4k points)

Hello, all. I don't know how get_rect() works, I'm actually trying to understand it.In this straightforward model, I have two pictures and need to get the area of the second and move the principal picture to the subsequent picture. 

I have taken a gander at an assortment of models on the web and can't get this to work. What am I fouling up? 

spaceshipImg = pygame.image.load('image2.jpg')

DISPLAYSURF.fill(WHITE)

# Place one image at the bottom of the screen

DISPLAYSURF.blit(baseImg, (300, 300))

pygame.display.update()

# Place the second image at the top of the screen

DISPLAYSURF.blit(spaceshipImg, (300, 0))

pygame.display.update()

# Wait for one second

time.sleep(1)

# Obtain the rectangle for each image

baseRect = baseImg.get_rect()

spaceshipRect = spaceshipImg.get_rect()

# This is where I believe I'm going wrong

# I understand this to obtain the x,y of the spaceship image

# Set the xy coordinates for the top image to the xy of the bottom image

spaceshipRect.x = baseRect.x

spaceshipRect.y = baseRect.y

# Move the top image to new xy position

# However this doesn't work

DISPLAYSURF.blit(spaceshipImg, (spaceshipRect.x, spaceshipRect.y))

pygame.display.update()

while True:

    for event in pygame.event.get():

        if event.type == QUIT:

            pygame.quit()

            sys.exit()

1 Answer

0 votes
by (26.4k points)
edited by

To begin with, pictures/pygame. Surfaces don't have a position, so you need to store the blit position in the rect. At the point when you call the get_rect strategy for a pygame.Surface, Pygame makes another rect with the size of the picture and the x, y organizes (0, 0). To give the rect other coords during the launch you can pass a contention to get_rect, generally focus or topleft is utilized. To move the rect later, you can change any of these characteristics of the rect:

x,y

top, left, bottom, right

topleft, bottomleft, topright, bottomright

midtop, midleft, midbottom, midright

center, centerx, centery

size, width, height

w,h

Look at the example:

import sys

import pygame as pg

BG_COLOR = pg.Color(80, 60, 70)

PLAYER_COLOR = pg.Color(90, 140, 190)

def main():

    screen = pg.display.set_mode((640, 480))

    clock = pg.time.Clock()

    player_img = pg.Surface((40, 60))

    player_img.fill(PLAYER_COLOR)

    # Create a rect with the size of the image/pygame.Surface

    # and immediately set it's topleft coords to (100, 300).

    player_rect = player_img.get_rect(topleft=(100, 300))

    done = False

    while not done:

        for event in pg.event.get():

            if event.type == pg.QUIT:

                done = True

            if event.type == pg.KEYDOWN:

                if event.key == pg.K_d:

                    # Set the center to these new coords.

                    player_rect.center = (400, 200)

                if event.key == pg.K_a:

                    # Set the x coord to 300.

                    player_rect.x = 300

        screen.fill(BG_COLOR)

        screen.blit(player_img, player_rect)

        pg.display.flip()

        clock.tick(30)

if __name__ == '__main__':

    pg.init()

    main()

    pg.quit()

    sys.exit()

Join python certification course to gain more knowledge in python

For more details, do check out this Python Full Course Video Tutorial...

Related questions

0 votes
1 answer
asked Nov 25, 2019 in Python by Sammy (47.6k points)
0 votes
1 answer
asked Nov 25, 2019 in Python by Sammy (47.6k points)
0 votes
1 answer
0 votes
1 answer
asked Nov 25, 2019 in Python by Sammy (47.6k points)

Browse Categories

...