我正在创建一个游戏,每当2个精灵发生碰撞时分数应该增加1。现在分数显示为0开始,然后一旦发生碰撞,它会增加到39(有时候是27。数字的变化使我认为它是以秒为单位递增的)。在这里阅读一些其他答案让我意识到这很可能是我的问题Python PyGame分数计数器以秒为单位递增而不是1
t = f.render("Score = " + str(score), False, black)
screen.blit(t, (0,0))
位于for循环。但我已经尝试将它放在其他地方,然后屏幕上根本没有出现分数。
这里是我的代码创建比分
class Tub(Sprite):
def __init__(self):
Sprite.__init__(self)
self.image = image.load("tub.bmp").convert_alpha()
self.image = transform.scale(self.image, (100, 100))
self.rect = self.image.get_rect()
self.rect.x = width/2
self.rect.y = height - 100
def movement(self):
keys = pygame.key.get_pressed()
dist = 5
if keys [pygame.K_LEFT]:
self.rect.x -= dist
if keys [pygame.K_RIGHT]:
self.rect.x += dist
def hit(self, target):
return self.rect.colliderect(target)
class Singlescoop_pink(Sprite):
def __init__(self):
Sprite.__init__(self)
self.image = image.load("singlescoop_pink.bmp").convert_alpha()
self.image = transform.scale(self.image, (100, 100))
self.rect = self.image.get_rect()
self.rect.x = random.randint(0, width-100) #random x position, minus 100 so image does not go off screen
self.rect.y = -600 #start off screen so starting point to fall down is not visible
def movement(self):
self.rect.y += 5
if self.rect.y > height:
self.kill()
tub = Tub()
sspink = Singlescoop_pink()
sprites = pygame.sprite.RenderPlain(tub, sspink)
score = 0
def game_loop():
gameExit = False
while not gameExit:
for event in pygame.event.get():
if event.type == pygame.QUIT:
quit()
sys.exit()
if tub.hit(sspink):
sspink.kill()
global score
score += 1
tub.movement()
sspink.movement()
screen.fill(white)
t = f.render("Score = " + str(score), False, black)
screen.blit(t, (0,0))
sprites.update()
sprites.draw(screen)
display.update()
clock.tick(60)
game_loop()
我之前做了一些游戏编程,但我还没有使用pygame的所以我不确定你是如何处理碰撞的,但它可能不是增加秒数,但可能是精灵在多个帧中接触?请记住,如果您的游戏运行速度为60 fps,则它将以每秒60次的速度运行主游戏循环,因此您的精灵可能会接触到多个帧,每秒会多次增加分数。 – RichSmith
完全是问题。谢谢! – Zanne