第5章    窗口控制

5.1    窗口放大

马里奥游戏的画面宽度为16个瓦片,高度为14个瓦片,每个瓦片的宽高为16像素,因此整个画面分辨率为256x224像素,在当前27寸、32寸或更大的显示器上,这样的画面会显得太小了,有必要放大一些。

最理想的解决方案是重新绘制所有瓦片图像,例如将每个瓦片的宽高增加到32像素,这样窗口就可以放大两倍,游戏就变成了高清重制版。然而,这个难度对我们来说太大了。一个简单的办法是直接将现有的图片放大到两倍,尽管效果肯定不如重新绘制完美。考虑到每个图片都是一个Surface对象,而屏幕本身也是一个Surface对象,因此,放大每个图像不如直接放大屏幕简单。

当前情况是,我们创建了一个screen变量,它是代表屏幕的一个Surface对象,后续的图片都会绘制在这个Surface上。现在变通一下,先将图片绘制到一个临时的Surface对象上,然后将这个对象放大两倍再绘制到屏幕上,代码如下所示:

05\01\Game.py

# 先画到一个画布上

self.screen = pygame.Surface((SCREEN_WIDTH, SCREEN_HEIGHT))

 

# 真正的屏幕

self.window = pygame.display.set_mode((SCREEN_WIDTH * 2, SCREEN_HEIGHT * 2))

 

…………(省略)…………

 

# 更新马里奥

self.mario.update(keys)

 

# 放大两倍并绘制到屏幕上

newSurface = pygame.transform.scale(self.screen, self.window.get_rect().size)

self.window.blit(newSurface, (0, 0))

 

# 刷新显示

pygame.display.flip()

运行程序,画面对比如5‑1所示,效果是不是相当不错?

51窗口放大两倍