簡體   English   中英

如何使對象暫時無敵?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM