我正在玩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
我认为这足以让你理解我的问题。谢谢:))
答案 0 :(得分:4)
这可以通过在检测到碰撞时引入您设置为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! :)
答案 1 :(得分:2)
您需要跟踪上次发生碰撞的时间(last_collision_time = time.time()
),然后发生碰撞时检查该值是否小于3秒(if time.time() - last_collision_time < 3.:
)并处理它你认为合适。在这种情况下,通过没有碰撞就可以清除船只。
答案 2 :(得分:2)
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()
# ....