Рисование поверхности в Pygame - PullRequest
1 голос
/ 23 сентября 2019

Я создал несколько поверхностей, которые будут выполнять роль заполнителей для моих элементов пользовательского интерфейса, одной из которых является «Игровое окно».Персонаж My Player создается с помощью модуля Freetype Font и отображается на целевой поверхности.Целевая поверхность заполняется каждый цикл, чтобы очистить «рамку», но символ не будет отображаться.Если заливка отсутствует, символ отображается, но дублирует каждый «кадр».Я знаю, что символ нарисован на правильной поверхности, так как начало координат (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 Ответ

2 голосов
/ 23 сентября 2019

Вы не показывали весь соответствующий код, но я считаю, что ничего не отображается, потому что ваша логика рисования работает следующим образом:

  1. очистить экран
  2. очистить игруSurface
  3. Blit игровой поверхности на экран
  4. Blit игрока изображение к игровой поверхности
  5. Перейти к 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))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...