微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在不减慢整个游戏的情况下减慢 pygame 功能

如何解决在不减慢整个游戏的情况下减慢 pygame 功能

我正在尝试在 pygame 中制作我的第一款游戏。

我希望游戏在后台有这个动画

我使用的是 python 3.9.2

import pygame,math,random,sys
from pygame.locals import *

screen = pygame.display.set_mode((400,400))
fps = 60

pygame.init()
mainClock = pygame.time.Clock()

# Colors 
black = (0,0)
white = (255,255,255)

# Function for close the game ------------------------------------------------------------------------------------------------------------

def close_game():
    pygame.quit()
    sys.exit()

# Functions for drawing ------------------------------------------------------------------------------------------------------------------

def background():
    screen.fill(black)

def canvas():
    margin = pygame.draw.rect(screen,white,(50,50,300,300),1)

def bar_animation():
    bar_width = 15
    for b in range(0,20):
        bar_b_height = random.randint(10,100)
        bar_b = pygame.draw.rect(screen,(50 + (bar_width * b),350 - bar_b_height,bar_width,bar_b_height),0)


# Main game loop --------------------------------------------------------------------------------------------------------------------------

def main_loop():
    running = True
    while running:

        background()
        bar_animation()
        canvas()

        for event in pygame.event.get():
            if event.type == QUIT:
                close_game()

            pass

        pygame.display.update()
        mainClock.tick(fps)


# Run game --

main_loop()

在那个代码上,我重新创建了我想要的游戏背景。 我想让 bar_animation() 函数运行得更慢,而不会使整个游戏或其他函数运行得更慢...

代码产生如下内容

.

我建议您执行代码以了解我在做什么

解决方法

您可以通过每几个滴答更新一次来减慢您的功能:

import pygame
import random

pygame.init()
screen = pygame.display.set_mode((400,400))
mainClock = pygame.time.Clock()

running = True
bar_b_heights = []
while running:
    screen.fill((0,0))
    pygame.draw.rect(screen,(255,255,255),(50,50,300,300),1)

    if pygame.time.get_ticks() % 10 == 0 or not bar_b_heights:
        bar_b_heights = [random.randint(10,100) for b in range(0,20)]
    for i,bar_b_height in enumerate(bar_b_heights):
        pygame.draw.rect(screen,(50 + (15 * i),350 - bar_b_height,15,bar_b_height),0)

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

    pygame.display.update()
    mainClock.tick(60)

pygame.display.quit()
pygame.quit()

输出:

enter image description here

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。