有谁知道我如何才能让分数显示在我的游戏画面上?
到目前为止,我有这段代码:
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;
有谁知道如何解决这个问题?
谢谢
答案 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))