亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

“if”命令只運行一次,不重復

“if”命令只運行一次,不重復

翻過高山走不出你 2023-06-20 16:13:36
我是 python 和 Pygame 的新手,正在嘗試創建游戲。我希望在設定的時間后出現“通電”,然后每次計時器達到這么多秒時重復一次。代碼中,出現“powerup”并在5秒后落下屏幕,定時器重置,但下一次定時器達到5秒時,繼續計數,不再產生“powerup”。我花了幾個小時試圖找出為什么這不起作用。import pygameimport randomWIDTH = 480HEIGHT = 600FPS = 60WHITE = (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 = 0font_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 = Truewhile 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()
查看完整描述

2 回答

?
白衣非少年

TA貢獻1155條經驗 獲得超0個贊

您不是在計算自上次以來的時差powerup。time_difference始終是游戲開始后的時間。每次要重置計時器時都需要保存滴答聲,并與之進行比較。


prev_time = pygame.time.get_ticks() #initialize tick counter

while 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()


查看完整回答
反對 回復 2023-06-20
?
胡子哥哥

TA貢獻1825條經驗 獲得超6個贊

他對 的修復是正確的time_difference,但您的代碼也存在另一個問題。


另一個問題是healthpack. 你正在這樣做all_sprites.add(healthpack),這只會把舊的healthpack放回列表中all_sprites。那個精靈離開屏幕并下降。你需要一個新的實例HealthPack。所以你需要像這樣修改@Barmar的解決方案:


prev_time = pygame.time.get_ticks() #initialize tick counter

while running:

    clock.tick(FPS)

    time_difference = pygame.time.get_ticks() - prev_time

    if time_difference >= 5000:

        healthpack = HealthPack()      # <-----------------   add this line

        all_sprites.add(healthpack)

        prev_time = pygame.time.get_ticks() # reset counter


查看完整回答
反對 回復 2023-06-20
  • 2 回答
  • 0 關注
  • 207 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號