【发布时间】:2014-04-18 00:55:31
【问题描述】:
我似乎在屏幕上显示文本时遇到问题 代码在屏幕上绘制文本,但“Score”的一半“S”被剪掉了。 但是,如果我将 screen.blit(text, self.score_rect, self.score_rect) 更改为 screen.blit(text, self.score_rect),它工作正常。我想知道为什么会发生这种情况以及如何解决这个问题。
谢谢。
代码如下:
class Score(object):
def __init__(self, bg, score=100):
self.score = score
self.score_rect = pygame.Rect((10,0), (200,50))
self.bg = bg
def update(self):
screen = pygame.display.get_surface()
font = pygame.font.Font('data/OpenSans-Light.ttf', 30)
WHITE = (255, 255, 255)
BG = (10, 10, 10)
score = "Score: " + str(self.score)
text = font.render(score, True, WHITE, BG)
text.set_colorkey(BG)
screen.blit(
self.bg,
self.score_rect,
self.score_rect)
screen.blit(text,
self.score_rect,
self.score_rect)
def main():
pygame.init()
#initialize pygame
pygame.init()
screen = pygame.display.set_mode((640, 480))
pygame.display.set_caption('Score Window')
#initialize background
bg = pygame.Surface((screen.get_size())).convert()
bg.fill((30, 30, 30))
screen.blit(bg, (0, 0))
#initialize scoreboard
score_board = Score(bg)
while True:
for event in pygame.event.get():
if event.type == QUIT:
exit(0)
score_board.update()
pygame.display.flip()
【问题讨论】:
-
用@jsbueno 所说的更简单的术语来说:blit 接受两个参数,表面和位置,哪个位置是一个元组,而不是元组之外的两个单独的点,所以这意味着
screen.blit(bg, 5, 5)将不起作用,但screen.blit(bg, (5, 5)会起作用,并将背景从像素点 (5,5) 开始绘制到屏幕上。因此,当您使用screen.blit(text, self.score_rect, self.score_rect) you are cutting the surface short, but usingself.score_rect` 时,它会给出 x、y 坐标以及宽度和高度,示例看起来像screen.blit(text, (0,0,20,10)我希望这会有所帮助! -
@DuhProgrammer13 确实做到了,谢谢 :)