在PyGame中,如何每3秒移动图像而不使用sleep函数?

3 投票
2 回答
2297 浏览
提问于 2025-04-18 09:03

最近我学了一些基础的Python,所以我正在用PyGame写一个游戏,想提升我的编程技能。

在我的游戏里,我想每3秒移动一次一个怪物的图像,同时我可以用鼠标瞄准它,点击鼠标来射击。

一开始我试着用time.sleep(3),但结果是整个程序都暂停了,这样我在3秒内就不能点击射击怪物了。

所以你们有没有什么解决办法呢?

提前谢谢大家!:)


最后在你们的帮助下,我解决了这个问题。非常感谢!这里是我代码的一部分:

import random, pygame, time

x = 0
t = time.time()
while True:

    screen = pygame.display.set_mode((1200,640))
    screen.blit(bg,(0,0))

    if time.time() > t + 3:
        x = random.randrange(0,1050)
        t = time.time()

    screen.blit(angel,(x,150))

    pygame.display.flip() 

2 个回答

0

我觉得这样可以,但我觉得用这种方式会更符合Python的风格。

import random, pygame

clock = pygame.time.Clock()
FPS = 26 #Or whatever number you want
loops_num = 0
while True:

    screen = pygame.display.set_mode((1200,640))
    screen.blit(bg,(0,0))

    if loops_num % (FPS * 3) == 0:
        enemy.move()

    screen.blit(angel,(x,150))

    pygame.display.flip()
    loops_num += 1
    clock.tick(FPS)

或者可以参考Bartlomiej Lewandowski说的,他的回答也很不错。

4

Pygame有一个时钟类,可以用来代替Python的时间模块。

下面是一个使用的例子:

clock = pygame.time.Clock()

time_counter = 0

while True:
    time_counter = clock.tick()
    if time_counter > 3000:
        enemy.move()
        time_counter = 0

撰写回答