PyGame-如何在屏幕中央获取图像

时间:2018-07-05 01:00:37

标签: python pygame

# 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 btw 因此,您已经看到,我已经尝试将其除以2,但是它看起来像这样:https://imgur.com/a/VXeFW7D

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

您犯了一个简单的数学错误。如果屏幕尺寸为800,然后将其除以2,则得到400。因此,如果图像的宽度为100像素,则将覆盖400到500像素,因此向右倾斜。

如果要使图像居中,则需要考虑其宽度的一半。因此,您获得左上角x坐标的计算应如下所示:

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

适应当前项目的细节应该很简单。

答案 1 :(得分:1)

首先,按照惯例,您应该将屏幕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()