pygame窗口调整大小而不更改内容中的任何内容

时间:2016-02-09 14:06:36

标签: python-2.7 resize pygame resolution

我想知道我是否可以更改窗口大小并将所有内容扩展到大约50%。我希望保持程序背后的所有逻辑仍然相关(例如pygame将注册点击1000 px,所以在500 px更改后)我不认为有一个简单的答案..

1 个答案:

答案 0 :(得分:0)

有两种不同的方法可以解决这个问题。如果你想选择一个屏幕大小并保持不变,直到你决定在后端更改它,你可以转到pygame.blit(foo)pygame.draw.shape(foobar)的每个电话,并扩大foo的尺寸和foob​​ar减少50%。这是一种简单的方法,但它有一些缺点。例如,如果您想再次更改屏幕尺寸,则必须重新进行。当然不理想。

如果您希望用户重新调整屏幕大小,或者您希望在选择自己的屏幕尺寸时提供更大的灵活性,则必须使用一些公式来确定根据屏幕大小绘制内容的位置。例如,假设您正在进行国际象棋比赛。你可以这样:

SCREEN_WIDTH = 500
TILE_WIDTH = SCREEN_WIDTH / 8

然后你的drawBoard函数看起来像:

for i in range(8):
    for j in range(8):
        ....
        #Color = black or white depending on which tile we're drawing
        pygame.draw.rect(mainWindow, color, (i * SCREEN_WIDTH, J * SCREEN_WIDTH, SCREEN_WIDTH, SCREEN_WIDTH))

现在,如果你想要一个更大的屏幕,你的瓷砖将随之扩大规模。或者,为了使它更复杂一点,假设你想要棋盘和窗口边缘之间的缓冲区。然后你可以做

SCREEN_WIDTH = 500
BUFFER = 20
TILE_WIDTH = (SCREEN_WIDTH - BUFFER * 2) / 8

您的drawBoard函数可能如下所示:

for i in range(8):
    for j in range(8):
        ....
        #Color = black or white depending on which tile we're drawing
        pygame.draw.rect(mainWindow, color, (BUFFER + i * SCREEN_WIDTH, BUFFER + J * SCREEN_WIDTH, SCREEN_WIDTH, SCREEN_WIDTH))

这种方式短期会更难,但从长远来看总是值得的。您还必须考虑是否要所有调整大小,或者是否有最小/最大尺寸以及其他一些想法,但我相信您可以解决这个问题。< / p>