Как изменить текст метки без наложения с использованием PyGame? [Дубликат]

1

Когда я показываю новый счет, используя font.render, а затем screen.blit, новый счет перекрывает старый, и я не мог найти решение даже после поиска похожих проблем. Может быть, есть хорошее решение? Спасибо за любой совет.

Изображение 174551

import pygame
import sys

WIDTH = 400
HEIGHT = 400
GREY_COLOUR = [150, 150, 150]
WHITE_COLOUR = [255,255,255]
center = (int(WIDTH / 2), int(HEIGHT / 2))
CIRCLE_RADIUS = 100


class Main:
    count = 0

    def __init__(self, screen):
        self.screen = screen
        self.running = True
        self.main_loop()

    def render(self):
        pygame.display.flip()


    def handle_events(self):
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                sys.exit()
            if event.type == pygame.KEYUP:
                if event.key == pygame.K_SPACE:
                    self.count+=1
                    self.showScore()

    def showScore(self):
        font = pygame.font.SysFont('Comic Sans MS', 30)
        scoretext = font.render("Score:" + str(self.count), 1, (0, 0, 0))
        screen.blit(scoretext, (center[0], center[1]-200))


    def main_loop(self):
        while self.running:
            self.handle_events()
            self.render()


pygame.init()
screen = pygame.display.set_mode((WIDTH, HEIGHT))
screen.fill(WHITE_COLOUR)
pygame.draw.circle(screen, GREY_COLOUR, center, CIRCLE_RADIUS, 2)
pygame.display.update()
game = Main(screen)
Теги:
python-3.x
pygame

1 ответ

2
Лучший ответ

Я думаю, вы могли бы предоставить фон функции рендеринга, поэтому он не прозрачен.

Для белого, например:

scoretext = font.render("Score:" + str(self.count), True, (0, 0, 0), (255, 255, 255))

Если я не ошибаюсь, второй аргумент antialias является логическим, поэтому он должен быть True

  • 0
    Спасибо, Сантьяго. Это лучше, чем ничего решать. Но это все равно не работает, если старый счет имел больше цифр, чем новый - последние цифры старого счета не заполняли пробел.
  • 1
    В этом случае вам может понадобиться сначала очистить область, отображая белую поверхность в текстовой области. Возможно, вы могли бы сохранить размеры предыдущей поверхности для очистки перед печатью следующей. Другим обходным решением может быть добавление некоторого пробела в конце строки ... scoretext = font.render("Score:%s " % self.count, True, (0, 0, 0), (255, 255, 255))
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню