Поверхность Pygame, кажется, отличается от того, что на экране?

Я пытаюсь создать виртуальную телефонную программу с pygame, просто чтобы поэкспериментировать с ней, но я столкнулся с проблемой. Я загрузил изображение, а затем опустил его в левом нижнем углу экрана. Но, когда я делаю print(imagename.get_rect()) распечатывает местоположение в 0, 0 экрана. и мышь там сталкивается с ним. что я не понимаю?

def aloitus(): #goes back to the home screen
    cls() #clears the screen
    tausta = pygame.image.load("./pyhelin.png") #load background
    tausta = pygame.transform.scale(tausta, (360, 640)) #scale it 
    screen.blit(tausta, (0, 0)) #blit it
    alapalkki = pygame.Surface((600, 100)) #ignore
    alapalkki.set_alpha(120)
    alapalkki.fill(blonk)
    screen.blit(alapalkki, (0, 560))
    global messenger #this is the thing!
    messenger = pygame.image.load("./mese.png").convert_alpha() #load image
    print(messenger.get_rect()) #print its location
    messenger = pygame.transform.scale(messenger, (60,65)) #scale it to the correct size
    screen.blit(messenger, (10, 570)) # blit on the screen
    update() #update screen
aloitus() # at the start of the program, go to the home screen
while loop: #main loop
    for event in pygame.event.get():
         if event.type == pygame.MOUSEBUTTONDOWN:
            # Set the x, y postions of the mouse click
            x, y = event.pos
            if messenger.get_rect().collidepoint(x, y): #messenger is the image defined earlier
                #do things
                print("hi")

Ожидаемый результат будет, при нажатии на изображение "привет" будет напечатан. фактический результат заключается в том, что при нажатии на верхний угол печатается привет.

1 ответ

Решение

get_rect возвращает pygame.Rect с верхними левыми координатами по умолчанию (0, 0). Вы должны установить координаты впоследствии или передать их в качестве аргумента ключевого слова get_rect,

Я предлагаю назначить прямоугольник другой переменной и установить координаты одним из следующих способов:

messenger_rect = messenger.get_rect()
messenger_rect.x = 100
messenger_rect.y = 200
# or
messenger_rect.topleft = (100, 200)
# or pass the coords as an argument to `get_rect`
messenger_rect = messenger.get_rect(topleft=(100, 200))

Есть еще больше прямоугольных атрибутов, которым вы можете назначить координаты:

x,y
top, left, bottom, right
topleft, bottomleft, topright, bottomright
midtop, midleft, midbottom, midright
center, centerx, centery
Другие вопросы по тегам