打印分数 - Pygame

时间:2014-03-25 00:15:06

标签: python text printing pygame

有谁知道我如何才能让分数显示在我的游戏画面上?

到目前为止,我有这段代码:

for bullet in bullet_list:

        block_hit_list = pygame.sprite.spritecollide(bullet, block_list, True)

        for block in block_hit_list:
        explosion.play()
        bullet_list.remove(bullet)
        all_sprites_list.remove(bullet)
        score += 10
        font = pygame.font.Font(None, 36)
        text = font.render(score, 1, (WHITE))
        textpos = text.get_rect(centerx=background.get_width()/2)
        background.blit(text, textpos)

    if bullet.rect.y < -10:
        bullet_list.remove(bullet)
        all_sprites_list.remove(bullet)

然而,一旦我启动游戏并射击子弹,我就会收到此错误:

&#34; text = font.render(得分,1,(白))

TypeError:text必须是unicode或bytes&#34;

有谁知道如何解决这个问题?

谢谢

2 个答案:

答案 0 :(得分:4)

好的,首先你问到如何正确地绘制网站,这就像上一个答案的做法一样,但是你把它搞定到屏幕的方式是错误的。

您每次通过for循环时都会在屏幕上显示分数blit,这会使其产生您正在经历的效果。这应该在for循环之后。 例如:

for bullet in bullet_list: 
    block_hit_list = pygame.sprite.spritecollide(bullet, block_list, True) 
    for block in block_hit_list:
        explosion.play()
        bullet_list.remove(bullet)
        all_sprites_list.remove(bullet) 
        score += 10
        #removed this line!!!! ~ font = pygame.font.Font(None, 36) 
        #removed this line to!!!! ~ text = font.render(score, 1, (WHITE)) 
        #remove this line also!!! ~ textpos = text.get_rect(centerx=background.get_width()/2) 
        #finally remove this line!!!! ~ background.blit(text, textpos) 
    if bullet.rect.y < -10:
        bullet_list.remove(bullet) 
        all_sprites_list.remove(bullet)
#add in those removed lines after your for loop.
font = pygame.font.Font(None, 36)
text = font.render(score, 1, (WHITE))
textpos = text.get_rect(centerx=background.get_width()/2)
background.blit(text, textpos)

这应该有效。如果您需要任何进一步的帮助,请告诉我。

答案 1 :(得分:2)

您需要将分数转换为字符串。

text = font.render(str(score), 1, (WHITE))