Pygame 表面缩放问题

问题描述 投票:0回答:1

我在 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变量,但这似乎不是问题

python pygame scale pygame-surface
1个回答
0
投票

表面由像素组成。当表面按

pygame.transform.scale
缩小时,一些像素就会被丢弃。使用
pygame.transform.smoothscale
来插值像素:

temp_frame = pygame.transform.scale(s, (192, 108)) # bug

temp_frame = pygame.transform.smoothscale(s, (192, 108)) # bug
© www.soinside.com 2019 - 2024. All rights reserved.