PyGame - Как получить изображение в центре экрана - PullRequest
0 голосов
/ 05 июля 2018
# MENU
def gameMenu():
intro = True
while(intro == True):
    win.fill((0,0,0))
    iPATH = f"{PATH}/assets/textures/titleScreen/buttons"
    win.blit(pygame.image.load(os.path.join(f"{iPATH}/startSelected.png")), (screenSize/2,500))
    iPATH = f"{PATH}/assets/textu
    win.blit(pygame.image.load(os.path.join(f"{iPATH}/Logo.png")), (screenSize/2,50))
    pygame.display.update()
    keys = pygame.key.get_pressed()
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
    if keys[selectButton]:
        print("clicked z")
        break
    elif keys[backButton]:
        print("clicked x")
    else:
        pass

screenSize = 800 между прочим Итак, я уже пытался разделить его на 2, как вы можете видеть, но это выглядит так: https://imgur.com/a/VXeFW7D

Есть идеи?

Ответы [ 2 ]

0 голосов
/ 05 июля 2018

Прежде всего, условно, вы должны назвать свой экран Surface просто screen.

Затем вы загружаете файлы изображений снова и снова в цикле while. Просто загрузите его один раз.

Также хорошо (почти) всегда использовать convert после загрузки изображения, чтобы Surface имел тот же формат пикселей, что и экран.

Наконец, в Pygame вы должны использовать класс Rect для (почти) всего, что связано с рисованием / позиционированием.

Здесь вы можете увидеть, как легко центрировать что-либо с помощью класса Rect. Я также переупорядочил ваш цикл в соответствии с классическим соглашением ввода / обновления / рисования и удалил второе изображение для краткости:

def gameMenu():

    iPATH = f"{PATH}/assets/textures/titleScreen/buttons"
    logo = pygame.image.load(os.path.join(f"{iPATH}/Logo.png")).convert()

    logo_rect = logo.get_rect(center = screen.get_rect().center)

    while True:

        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                return

        keys = pygame.key.get_pressed()
        if keys[selectButton]:
            print("clicked z")
            break
        elif keys[backButton]:
            print("clicked x")

        screen.fill((0,0,0))
        screen.blit(logo, logo_rect)
        pygame.display.update()
0 голосов
/ 05 июля 2018

Вы допустили простую математическую ошибку. Если ваш размер экрана равен 800, а вы делите его на 2, вы получаете 400. Следовательно, при ширине изображения, скажем, 100 пикселей, вы будете покрывать пиксели от 400 до 500, что приведет к перекосу вправо.

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

x_centered = screen_width / 2 - image_width / 2
y_centered = screen_height / 2 - image_height / 2 #similarly..

Адаптация к специфике вашего текущего проекта должна быть довольно простой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...