我在 Pygame 中遇到一个问题,如果我将带有网格(在第一张图像中正确显示)的Surface缩放为较小的尺寸,我会遇到一个奇怪的错误,即线条绘制不正确。据我了解,当我在具有特定尺寸的虚拟表面上绘制某些内容时,我应该能够绘制与这些尺寸相关的任何内容,并且当我缩放它时,内部的所有内容也应该缩放,但就我而言,它不起作用那样。这是我的代码:
import pygame
WIDTH = 640
HEIGHT = 320
TILE_SIZE = 32
pygame.init()
# 16:9 R
screen = pygame.display.set_mode((192, 108), pygame.RESIZABLE)
s = pygame.Surface([WIDTH, HEIGHT])
pygame.display.set_caption("Grid")
def draw_grid():
s.fill((255, 255, 255))
for v in range((WIDTH // TILE_SIZE) + 1):
# vertical
pygame.draw.line(s, (0, 0, 0), (TILE_SIZE * v, 0), (TILE_SIZE * v, HEIGHT))
# horizontal
for h in range((HEIGHT // TILE_SIZE) + 1):
pygame.draw.line(s, (0, 0, 0), (0, TILE_SIZE * h), (WIDTH, TILE_SIZE * h))
def draw_bg():
temp_frame = pygame.transform.scale(s, (192, 108)) # bug
screen.blit(temp_frame , (0, 0))
# screen.blit(s, (0, 0)) would work properly
while True:
draw_grid()
draw_bg()
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
pygame.display.flip()
我尝试更改draw_grid中的WIDTH和HEIGHT变量,但这似乎不是问题
pygame.transform.scale
缩小时,一些像素就会被丢弃。使用 pygame.transform.smoothscale
来插值像素:
temp_frame = pygame.transform.scale(s, (192, 108)) # bug
temp_frame = pygame.transform.smoothscale(s, (192, 108)) # bug