Pygame:如何正确使用get_rect()

2024-10-01 15:49:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我想了解get_rect()是如何工作的。在这个简单的例子中,我有两个图像,希望获得第二个图像的位置,并将第一个图像移动到第二个图像。

我在网上看过各种各样的例子,但都无法让它发挥作用。我做错什么了?

import pygame, sys
from pygame.locals import *
import time

pygame.init()
FPS = 10 # frames per second setting
fpsClock = pygame.time.Clock()

# Set up the window
DISPLAYSURF = pygame.display.set_mode((600, 400), 0, 32)
pygame.display.set_caption('Test program for get_rect()')

WHITE = (255, 255, 255)

# Load two images
baseImg = pygame.image.load('image1.jpg')
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()

Tags: oftherect图像imageimportforget
1条回答
网友
1楼 · 发布于 2024-10-01 15:49:41

首先,images/pygame.Surfaces没有位置,因此必须将blit位置存储在rect中。当调用pygame.Surface的get_rect方法时,pygame会创建一个新的矩形,该矩形的大小与图像的大小和x,y坐标(0,0)相同。为了在实例化期间给rect提供其他坐标,可以传递一个参数来获取rect,主要使用centertopleft。要以后移动矩形,可以更改矩形的以下任何属性:

x,y
top, left, bottom, right
topleft, bottomleft, topright, bottomright
midtop, midleft, midbottom, midright
center, centerx, centery
size, width, height
w,h

下面是一个例子(按a或d键更改矩形的位置,从而更改图像的blit位置):

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()

相关问题 更多 >

    热门问题