我正在pygame中制作一款游戏,我需要我的飞船在与小行星碰撞后大约3秒内保持免疫。我试了我找到的所有函数,但都不起作用。
这是我代码中的碰撞部分:
if collision == True:
ship_game = ship_destroyed
lifes -= 1;
然后我有这部分:
if collision:
pi = True
collision = False
pygame.time.delay(1000)
在碰撞的情况下,我使用pi变量将船放在屏幕中间:
if pi == True:
ship_game = ship
pos_ship={'x': WScreen/2, 'y': HScreen/2}
pi = False
我想这足以让你理解我的问题。谢谢:)
这可以通过引入一个变量collision_immune
来实现,当检测到碰撞时将其设置为True
。同时,你在一个变量collision_time
中记录最后一次碰撞的时间。你可以从pygame.time.get_ticks()
得到时间。然后,在主循环的适当部分(如上所示),您可以检查自上次碰撞以来的时间是否超过3秒,并将collision_immune
重置为False。它可以像这样
if collision == True:
ship_game = ship_destroyed
lifes -= 1;
collision_immune = True
collision_time = pygame.time.get_ticks()
然后在某个地方,可能在主循环的开始,你把
if pygame.time.get_ticks() - collision_time > 3000: # The time is in ms.
collision_immune = False
现在你可以在你的游戏逻辑中使用变量collision_immune
来确定船是否对最近的碰撞免疫。
pygaming快乐!:)
您需要跟踪最后一次碰撞发生的时间(last_collision_time = time.time()
),然后当碰撞发生时,您检查该值是否小于3秒(if time.time() - last_collision_time < 3.:
),并按照您认为合适的方式处理它。在这种情况下,很明显是不让碰撞摧毁船
OOP样式:
class Ship:
def immune(self):
return self.last_collide_time > current_time() - 3000
def collide(self):
if self.immune(): return
self.lifes -= 1
self.last_collide_time = current_time()
# ....