“if”命令只运行一次,不重复

我是 python 和 Pygame 的新手,正在尝试创建游戏。我希望在设定的时间后出现“通电”,然后每次计时器达到这么多秒时重复一次。


代码中,出现“powerup”并在5秒后落下屏幕,定时器重置,但下一次定时器达到5秒时,继续计数,不再产生“powerup”。


我花了几个小时试图找出为什么这不起作用。


import pygame

import random


WIDTH = 480

HEIGHT = 600

FPS = 60


WHITE = (255, 255, 255)

BLACK = (0, 0, 0)

GREEN = (0, 255, 0)


pygame.init()

screen = pygame.display.set_mode((WIDTH, HEIGHT))

clock = pygame.time.Clock()


time_difference = 0


font_name = pygame.font.match_font('arial')

def draw_text(surf, text, size, x, y):

    font = pygame.font.Font(font_name, size)

    text_surface = font.render(text, True, WHITE)

    text_rect = text_surface.get_rect()

    text_rect.midtop = (x, y)

    surf.blit(text_surface, text_rect)


class HealthPack(pygame.sprite.Sprite):

    def __init__(self):

        pygame.sprite.Sprite.__init__(self)

        self.image = pygame.Surface((50, 40))

        self.image.fill(GREEN)

        self.rect = self.image.get_rect()

        self.radius = 50

        self.rect.x = random.randrange(WIDTH - self.rect.width)

        self.rect.y = random.randrange(-150, -100)

        self.speedy = 6

        self.speedx = 0


    def update(self):

        self.rect.y += self.speedy

        if self.rect.top > HEIGHT:

            self.kill()


all_sprites = pygame.sprite.Group()


healthpack = HealthPack()


running = True

while running:

    clock.tick(FPS)

    time_difference = pygame.time.get_ticks()

    if time_difference >= 5000:

        all_sprites.add(healthpack)

        time_difference -= 5000

    for event in pygame.event.get():

        if event.type == pygame.QUIT:

            running = False


    all_sprites.update()


    screen.fill(BLACK)

    all_sprites.draw(screen)

    draw_text(screen, str(time_difference), 18, WIDTH / 2, 55)


    pygame.display.flip()


pygame.quit()


翻过高山走不出你
浏览 169回答 2
2回答

白衣非少年

您不是在计算自上次以来的时差powerup。time_difference始终是游戏开始后的时间。每次要重置计时器时都需要保存滴答声,并与之进行比较。prev_time = pygame.time.get_ticks() #initialize tick counterwhile running:    clock.tick(FPS)    time_difference = pygame.time.get_ticks() - prev_time    if time_difference >= 5000:        all_sprites.add(healthpack)        prev_time = pygame.time.get_ticks() # reset counter    for event in pygame.event.get():        if event.type == pygame.QUIT:            running = False    all_sprites.update()    screen.fill(BLACK)    all_sprites.draw(screen)    draw_text(screen, str(time_difference), 18, WIDTH / 2, 55)    pygame.display.flip()

胡子哥哥

他对 的修复是正确的time_difference,但您的代码也存在另一个问题。另一个问题是healthpack. 你正在这样做all_sprites.add(healthpack),这只会把旧的healthpack放回列表中all_sprites。那个精灵离开屏幕并下降。你需要一个新的实例HealthPack。所以你需要像这样修改@Barmar的解决方案:prev_time = pygame.time.get_ticks() #initialize tick counterwhile running:&nbsp; &nbsp; clock.tick(FPS)&nbsp; &nbsp; time_difference = pygame.time.get_ticks() - prev_time&nbsp; &nbsp; if time_difference >= 5000:&nbsp; &nbsp; &nbsp; &nbsp; healthpack = HealthPack()&nbsp; &nbsp; &nbsp; # <-----------------&nbsp; &nbsp;add this line&nbsp; &nbsp; &nbsp; &nbsp; all_sprites.add(healthpack)&nbsp; &nbsp; &nbsp; &nbsp; prev_time = pygame.time.get_ticks() # reset counter
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python