Получение центра поверхностей в pygame с помощью python 3.4

У меня проблемы с получением центра поверхностей с помощью pygame. По умолчанию это верхний левый угол поверхностей при попытке разместить их на других поверхностях.

Чтобы продемонстрировать, что я имею в виду, я написал короткую программу.

import pygame

WHITE = (255, 255, 255)

pygame.init()
#creating a test screen
screen = pygame.display.set_mode((500, 500), pygame.RESIZABLE)
#creating the canvas
game_canvas = screen.copy()
game_canvas.fill(WHITE)
#drawing the canvas onto screen with coords 50, 50 (tho its using the upper left of game_canvas)
screen.blit(pygame.transform.scale(game_canvas, (200, 200)), (50, 50))
pygame.display.flip()


#you can ignore this part.. just making the program not freeze on you if you try to run it
import sys

clock = pygame.time.Clock()
while True:
    delta_time = clock.tick(60) / 1000
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()

Если вы запустите эту программу, она нарисует белый game_canvas размером 200 на 200 на экране (дисплее) с координатами 50, 50. Но вместо использования центра game_canvas с координатами 50, 50... верхний левый угол будет с координатами 50. , 50.

Итак, как мне использовать центр game_canvas, чтобы он располагался в координатах 50, 50 или любых других заданных координатах?


person Griffin Bender    schedule 03.12.2016    source источник


Ответы (1)


Он всегда будет загораживать поверхность в верхнем левом углу. Способ обойти это — рассчитать, где вы должны разместить поверхность, чтобы она была центрирована вокруг позиции.

x, y = 50, 50
screen.blit(surface, (x - surface.get_width() // 2, y - surface.get_height() // 2))

Это разместит его центр в координатах (x, y).

Кроме того, вы можете создать объект Rect с центром в точках x и y и использовать его для позиционирования поверхности.

x, y = 50, 50
rect = surface.get_rect(center=(x, y))
screen.blit(surface, rect)
person Ted Klein Bergman    schedule 04.12.2016
comment
Спасибо, это беспокоило меня. Однако, чтобы заставить это работать, я изменил свой game_canvas с копии экрана на его собственную поверхность pygame и сделал свое преобразование вне блита. Отлично работает сейчас. - person Griffin Bender; 05.12.2016