surface.fill 不适用于 pygame 中的 pygame.Surface 变量

Posted

技术标签:

【中文标题】surface.fill 不适用于 pygame 中的 pygame.Surface 变量【英文标题】:surface.fill doesn't work in with a pygame.Surface variable in pygame 【发布时间】:2022-01-21 02:12:53 【问题描述】:

因此,我一直在尝试创建一个小代码,该代码将使用 pygame.RESIZABLE 在我的屏幕上缩放图像,以便能够根据需要调整我的游戏窗口大小,而不会破坏代码中的任何垫子。我发现解决这个问题的方法是在 pygame.Surface 上对我的游戏中的所有内容进行 blitting,然后我会缩放以适合我的 pygame.display 一切正常,但是当我使用 game.fill('black') 时它不会' t 似乎填满了我的屏幕,我在屏幕上绘制的用于测试缩放的正方形没有移动。我知道这是导致问题的 game.fill('black') 行,因为如果我删除该行,正方形会自行缩放,但屏幕不会刷新。请帮忙。

# Setup
import pygame
from sys import exit

pygame.init()

# Settings
tile_size = 64
game_width = 1200
game_height = 700
screen_width = game_width
screen_height = game_height

screen = pygame.display.set_mode((screen_width,screen_height),pygame.RESIZABLE)
game = pygame.Surface((game_width,game_height))
pygame.display.set_caption('Image resize')
clock = pygame.time.Clock()

while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            exit()
        if event.type == pygame.VIDEORESIZE:
            screen_width = screen.get_height() * screen_width / screen_height
            screen_height = screen.get_height()
            game = pygame.transform.scale(game,(screen_width,screen_height))

    screen.fill('black')
    game.fill('black') # This is the line that I think isn't working try commenting it out to see that the rest of the code is working fine just not refreshing which is the purpose of this line

    pygame.draw.rect(game,'red',(tile_size,tile_size,tile_size,tile_size))
    screen.blit(game,(0,0))

    pygame.display.update()
    clock.tick(60)

【问题讨论】:

当然可以。 game Surface 上有 2 个方格。调整大小之前的那个,以及在应用程序循环中不断绘制的那个。 是的,我如何删除第一个 【参考方案1】:

当窗口大小发生变化时,仅缩放game 是不够的Surface 您必须在每一帧中缩放game _Surface。 场景是在 1200 x 700 Surface 上的每一帧中绘制的。您必须将此Surface 缩放到每一帧中窗口的大小。更准确地说,您必须在场景发生变化的每一帧中缩放并blit 游戏表面。

while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            exit()
        if event.type == pygame.VIDEORESIZE:
            screen_width = screen.get_height() * screen_width / screen_height
            screen_height = screen.get_height()
            screen = pygame.display.get_surface()
            
    game.fill('black')
    pygame.draw.rect(game,'red',(tile_size,tile_size,tile_size,tile_size))
    
    scaled_game = pygame.transform.scale(game,(screen_width,screen_height))
    screen.blit(scaled_game, (0,0))

    pygame.display.update()
    clock.tick(60

【讨论】:

以上是关于surface.fill 不适用于 pygame 中的 pygame.Surface 变量的主要内容,如果未能解决你的问题,请参考以下文章

Pygame:这个 spritesheet 代码适用于另一个项目,但不适用于这个项目。为啥?

碰撞检测不适用于pygame

旋转后的OpenGL python和pygame翻译不适用于mouselook和移动

Pygame代码不适用于sprite组中的每个sprite

用pygame,做一个小小小小小........游戏

在pygame中的透明表面上渲染抗锯齿文本