您好,今天我想知道是否可以在后台进行延迟或其他操作以使程序不会停止。这是可能的?
我想让每 2 秒一个矩形移动到 x 位置,再过 2 秒它就消失了。所有这一切都无需停止其他进程。
版:
完成代码后,我遇到了问题。如果说它消失的时间正好是它出现的两倍,那就是一个问题,那就是它不会消失,因为出现和消失是相互矛盾的。
代码更好地解释:
这是课程:
class Laser1(pygame.sprite.Sprite):
def __init__(self):
pygame.sprite.Sprite.__init__(self)
self.image = pygame.image.load("sprites/laserH.png")
self.rect = self.image.get_rect()
self.rect.left = 176
self.rect.top = 400
def update(self, dt):
pass
def move_1(self, dt):
self.rect.left = 176
self.rect.top = 400
def move_2(self, dt):
self.rect.left = 1000
self.rect.top = 700
这是计时器:
pygame.time.set_timer(pygame.USEREVENT + 1, 700)
pygame.time.set_timer(pygame.USEREVENT + 2, 1400)
这是事件检测:
for event in pygame.event.get():
if event.type == QUIT:
pygame.quit()
sys.exit()
elif event.type == pygame.USEREVENT + 1:
laser1.move_1(dt)
elif event.type == pygame.USEREVENT + 2:
laser1.move_2(dt)
就好像 USEREVENT + 2 从未发生过一样。一些帮助?谢谢。
在 PyGame 中,有两种方法可以并且通常用于这种类型的任务:
pygame.time.get_ticks
: 这个方法给了我们自它pygame.init()
被调用以来经过的毫秒数。pygame.time.set_timer
:允许每 x 毫秒重复启动一个事件,我们可以在事件队列中捕获并在所述事件存在时启动响应。原则上,使用这两种方法,我们可以充分发挥它们的作用,使其适应多种需要定时或编程某些任务的情况,当然不会阻塞主循环。
为了稍微说明它的使用,我们将看到两个示例:
精灵每 x 次重复改变位置。
一个例子是 tetrix 的碎片。为此,我们可以使用
pygame.time.set_timer
. 当然,可能性不仅限于移动对象,我们可以每 x 毫秒重复执行任何任务。我们可以多次调用
pygame.time.set_timer
,每个都有自己的计时器,并在事件队列中播放时放置分配的事件。要停止给定事件的计时器,只需再次调用该方法,将 0 传递给第二个参数(毫秒)。
让精灵在创建后两秒移动到某个位置,再过两秒它会自行销毁。
这在原则上与您想要的类似,在这种情况下,我们将使用
pygame.time.get_ticks
. 按下空格键会创建一个新的精灵(限制为 5 个同时出现的精灵),当它创建后 2 秒后它会移动到屏幕中心,再过 2 秒它会消失:它们只是试图说明一般概念的两个简单示例,根据特定情况,我们可以调整代码以满足特定需求。
如果有人想重现示例,这是使用的精灵 (
square.png
):