使用 定時器 新增敵機
執行 備課**,觀察 敵機的 出現規律:
遊戲啟動後,每隔 1 秒 會 出現一架敵機
每架敵機 向螢幕下方飛行,飛行 速度各不相同
每架敵機出現的 水平位置 也不盡相同
當敵機 從螢幕下方飛出,不會再飛回到螢幕中
set_timer(eventid, milliseconds) -> none
第 2 個引數是 事件觸發 間隔的 毫秒值
定時器事件的監聽
pygame 的 定時器 使用套路非常固定:
定義 定時器常量 —— eventid
在 初始化方法 中,呼叫 set_timer 方法 設定定時器事件
在 遊戲迴圈 中,監聽定時器事件
1) 定義事件
# 敵機的定時器事件常量
create_enemy_event = pygame.userevent
在 planegame 的 初始化方法 中 建立使用者事件
# 4. 設定定時器事件 - 每秒建立一架敵機
pygame.time.set_timer(create_enemy_event, 1000)
2) 監聽定時器事件
def __event_handler(self):
for event in pygame.event.get():
# 判斷是否退出遊戲
if event.type == pygame.quit:
planegame.__game_over()
elif event.type == create_enemy_event:
print("敵機出場...")
遊戲啟動後,每隔 1 秒 會 出現一架敵機
每架敵機 向螢幕下方飛行,飛行 速度各不相同
每架敵機出現的 水平位置 也不盡相同
當敵機 從螢幕下方飛出,不會再飛回到螢幕中
重寫 update() 方法
class enemy(gamesprite):
"""敵機精靈"""
def __init__(self):
# 1. 呼叫父類方法,建立敵機精靈,並且指定敵機的影象
super().__init__("./images/enemy1.png")
# 2. 設定敵機的隨機初始速度
# 3. 設定敵機的隨機初始位置
def update(self):
# 1. 呼叫父類方法,讓敵機在垂直方向運動
super().update()
# 2. 判斷是否飛出螢幕,如果是,需要將敵機從精靈組刪除
if self.rect.y >= screen_rect.height:
print("敵機飛出螢幕...")
演練步驟
在 __create_sprites,新增 敵機精靈組
在 __event_handler,建立敵機,並且 新增到精靈組
在 __update_sprites,讓 敵機精靈組 呼叫 update 和 draw 方法
演練**
# 敵機組
self.enemy_group = pygame.sprite.group()
修改 plane_main 的 __update_sprites 方法
self.enemy_group.update()
self.enemy_group.draw(self.screen)
定時出現敵機
elif event.type == create_enemy_event:
self.enemy_group.add(enemy())
匯入模組
1. 官方標準模組匯入
2. 第三方模組匯入
3. 應用程式模組匯入
修改 plane_sprites.py 增加 random 的匯入
import random
隨機位置
使用 pygame.rect 提供的 bottom 屬性,在指定敵機初始位置時,會比較方便
**實現
def __init__(self):
# 1. 呼叫父類方法,建立敵機精靈,並且指定敵機的影象
super().__init__("./images/enemy1.png")
# 2. 設定敵機的隨機初始速度 1 ~ 3
self.speed = random.randint(1, 3)
# 3. 設定敵機的隨機初始位置
self.rect.bottom = 0
max_x = screen_rect.width - self.rect.width
self.rect.x = random.randint(0, max_x)
檢測敵機被銷毀
def __del__(self):
print("敵機掛了 %s" % self.rect)
**實現
判斷敵機是否飛出螢幕,如果是,呼叫 kill() 方法從所有組中刪除
def update(self):
super().update()
# 判斷敵機是否移出螢幕
if self.rect.y >= screen_rect.height:
# 將精靈從所有組中刪除
self.kill()
Python飛機大戰
玩家飛機可以移動,可以發射子彈,敵機隨機產生,自由墜落。未新增擊落敵機的功能。主要用來練習類的封裝與繼承。coding utf 8 import pygame,random from pygame.locals import class base object def init self,x,y,s...
Python 飛機大戰
新建專案 在選中主韙專案的情況下,tab鍵,會自動的出來乙個下級分支 在選中當前分支的情況五,點enter,會出來乙個同級的分支 第一次背景精靈組,呼叫 update方法。結果就是,背景精靈組中的所有背景物件,呼叫自身的update方法 初始化的時候,生成了 兩個背景物件 並且,建立了乙個背景圖精靈...
Java學習之路 簡單的飛機大戰遊戲(敵機下落篇)
在實現這個遊戲之前,我們首先需要知道專案可能要用到哪些知識點 重繪,執行緒,雙緩衝,資料結構的應用 差不多是這大概有這些,如果不夠的話我們再加。首先,我們應該實現敵機下落,在這裡大概思路和利用執行緒使小球下落差不多。不同的是,我在這裡用到了三種敵機,分別為小 大 boss機三種。然後給予這三種敵機不...