我创建了许多表面来充当 UI 元素的占位符,其中之一是“游戏窗口”。我的玩家角色是使用 Freetype 字体模块创建的,并渲染到目标表面。每次循环都会填充目标表面以清除“框架”,但字符不会显示。如果没有填充,则会显示字符,但会复制每个“帧”。我知道字符是在正确的表面上绘制的,因为原点是 (0, 0),并且是在表面相对于屏幕偏移时偏移绘制的。
# Set up various surfaces for UI containers
GAME_SURFACE = pygame.Surface((1350, 755))
GAME_SURFACE_RECT = pygame.Surface.get_rect(GAME_SURFACE)
STATS_SURFACE = pygame.Surface((1350, 125))
CHAR_DETAILS_SURFACE = pygame.Surface((570, 540))
ENEMY_DETAILS_SURFACE = pygame.Surface((570, 540))
LOG_SURFACE = pygame.Surface((1350, 200))
# Initialise Objects
PLAYER = Entity(0, 0, PLAYER_CHAR, WHITE, GAME_SURFACE)
...
# --- Screen-clearing code goes here
SCREEN.fill(BLACK)
GAME_SURFACE.fill(BLACK)
STATS_SURFACE.fill(RED)
CHAR_DETAILS_SURFACE.fill(WHITE)
ENEMY_DETAILS_SURFACE.fill(GREEN)
LOG_SURFACE.fill(RED)
# --- Drawing code should go here
SCREEN.blit(STATS_SURFACE, (0, 0))
SCREEN.blit(CHAR_DETAILS_SURFACE, (1350, 0))
SCREEN.blit(ENEMY_DETAILS_SURFACE, (1350, 540))
SCREEN.blit(LOG_SURFACE, (0, 880))
SCREEN.blit(GAME_SURFACE, (0, 125))
PLAYER.draw()
最佳答案
您没有显示所有相关代码,但我有根据的猜测是,没有显示任何内容是因为您的绘图逻辑像这样的循环一样工作:
- 清屏
- 干净的游戏表面
- 将游戏表面传输到屏幕
- 将玩家图像传输到游戏界面
- 转到 1。
因此,当您将玩家图像绘制到游戏表面时,它会在更新的游戏表面被传输到屏幕表面之前立即被清除。
在这种情况下,请先更新游戏表面,然后再将其传输到屏幕表面。像这样的事情:
# --- Screen-clearing code goes here
SCREEN.fill(BLACK)
GAME_SURFACE.fill(BLACK)
STATS_SURFACE.fill(RED)
CHAR_DETAILS_SURFACE.fill(WHITE)
ENEMY_DETAILS_SURFACE.fill(GREEN)
LOG_SURFACE.fill(RED)
# --- Drawing code should go here
PLAYER.draw()
SCREEN.blit(STATS_SURFACE, (0, 0))
SCREEN.blit(CHAR_DETAILS_SURFACE, (1350, 0))
SCREEN.blit(ENEMY_DETAILS_SURFACE, (1350, 540))
SCREEN.blit(LOG_SURFACE, (0, 880))
SCREEN.blit(GAME_SURFACE, (0, 125))
关于python - Pygame 中的曲面绘制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58056829/