Я использую python 2.7.1 с pygame 1.9.1 на 64-битной win7. Я использую код градиента http://www.pygame.org/wiki/GradientCode, чтобы нарисовать фон. Затем я отображаю текст так:
countText = font.render( "%d" % secs_left, 1, (255, 0, 0))
countRect = countText.get_rect()
countRect.y, countRect.centerx = yPos, screen.get_rect().width/2
screen.blit(countText, countRect)
pygame.display.flip()
Я использую это для отображения таймера обратного отсчета, но проблема в том, что числа нарисованы друг над другом. Я могу указать цвет фона в вызове font.render (), чтобы решить эту проблему, но затем я получаю еще одну проблему, когда сплошной фон не соответствует градиентному фону.
Я думаю, что это можно решить, сохранив копию градиентного фона на другой поверхности, а затем нарисовав соответствующую часть сохраненной поверхности на фоне, прежде чем рисовать следующее число, но я не уверен, как это сделать.
Я могу сохранить копию градиентного фона следующим образом:
# save a surface with same size and gradient as background
bg_image = pygame.Surface(screen.get_size())
fill_gradient(bg_image, BG_COLOR, GRADIENT_COLOR)
Но как мне выбрать соответствующую часть bg_image и нарисовать ее на фоне основного экрана? Я попробовал что-то вроде этого, выполнив метод screen.blit (), чтобы попытаться стереть текущий номер обратного отсчета, прежде чем перетаскивать новый, но он не работает:
countText = usefont.render( "%d" % secs_left, 1, (255, 0, 0))
countRect = countText.get_rect()
countRect.y, countRect.centerx = yPos, screen.get_rect().width/2
screen.blit(bg_image, (0,0), countRect)
screen.blit(countText, countRect)
pygame.display.flip()
Будет ли это наилучшим подходом (с работающим кодом)? Или есть лучший способ сделать это?
Спасибо за вашу помощь.