[英]How to make an object have temporary invincibility?
我正在玩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()
# ....
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.