马里奥游戏的画面宽度为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所示,效果是不是相当不错?

图5‑1窗口放大两倍