gpt4 book ai didi

python - 您可以同时拥有两个具有不同 FPS 值的函数吗?

转载 作者:行者123 更新时间:2023-12-04 15:33:50 26 4
gpt4 key购买 nike

我正在开发一款在屏幕上显示 Python 绘制的图像的游戏,有时用户需要从库存中单击并拖动一个项目以在屏幕上产生一些碰撞。

游戏的主要函数有:clock.tick(60)。我创建了一个显示噪音的功能(比如当电视没有接收信号时)并且在 60 FPS 下,它运行得太快了。如果我添加 sleep 、等待、延迟等,看起来不错,但是,在屏幕上拖动一个项目会有很多滞后。我宁愿项目完全不滞后,所以我需要知道如何减慢噪音功能。

def whitespace(surface, rect):
pixel_size = 4
pixel_length = rect.h / pixel_size
pixel_height = rect.w / pixel_size
start = rect.x

pixel_grid = [[1]*int(pixel_height) for n in range(int(pixel_length))]

colors = [(255, 255, 255), (205, 205, 205), (155, 155, 155), (100, 100, 100)]

for row in pixel_grid:
for col in row:
color = random.randint(0, 3)
surface.fill(colors[color], ((rect.x, rect.y), (pixel_size, pixel_size)))
rect.x += pixel_size
rect.y += pixel_size
rect.x = start

最佳答案

创建一个可以生成“空白”表面的函数。生成的表面从函数返回:

def create_whitespace(rect):
surface = pygame.Surface(rect.size)

pixel_size = 4
pixel_length = rect.h / pixel_size
pixel_height = rect.w / pixel_size
start = rect.x

pixel_grid = [[1]*int(pixel_height) for n in range(int(pixel_length))]

colors = [(255, 255, 255), (205, 205, 205), (155, 155, 155), (100, 100, 100)]

for row in pixel_grid:
for col in row:
color = random.randint(0, 3)
surface.fill(colors[color], (0, 0, pixel_size, pixel_size))
rect.x += pixel_size
rect.y += pixel_size
rect.x = start

return surface

创建另一个blit窗口表面的函数:

def draw_whitespace(surface, ws_surf, rect):
surface.blit(ws_surf, rect)

在每一帧中将表面 Blit 到窗口,但较少生成新的随机“空白”表面。这导致为多个帧绘制相同的“空白”:

ws_cnt = 0
while True:

# [...]

if ws_cnt == 0:
ws_surf = create_whitespace(rect)
ws_cnt += 1
if ws_cnt == 5: # 5 is just an example
ws_cnt = 0
draw_whitespace(screen, ws_surf, rect)

# [...]

关于python - 您可以同时拥有两个具有不同 FPS 值的函数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60478172/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com