(三)通過pygame處理用戶的鼠標鍵盤操作(事件和監聽)


python飛機大戰系列文章(按順序)
(一)通過pygame 將自己的圖像添加到遊戲中
(二)通過pygame讓遊戲人物 動起來
(三)通過pygame處理用戶的鼠標鍵盤操作(事件和監聽
(四)詳解pygame中的精靈和精靈組
(五)通過pygame搭建遊戲框架
(六)通過pygame讓遊戲背景圖像實現交替滾動
(七)通過pygame來設置飛機大戰中 敵機 的速度、位置等
(八)通過pygame來操控遊戲人物的移動
(九)通過pygame使遊戲人物發射子彈
(十)通過pygame來進行碰撞檢測


事件和監聽

首先,先的知道什麼是事件event

  • 就是遊戲啓動後,用戶針對遊戲所做的操作
  • 例如:點擊關閉按鈕,點擊鼠標,按下鍵盤

再者,要知道什麼是監聽

  • 監聽是在遊戲循環中,判斷用戶的具體操作
  • 只有捕獲到用戶具體的操作,纔能有針對性的做出響應

接下來,就是代碼

  • pygame中通過pygame.event.get()可以獲得用戶當前所做的所用操作事件列表

代碼如下:

import pygame

pygame.init()
#創建遊戲窗口 大小爲480 * 700
#繪製背景圖像
screen = pygame.display.set_mode((480,700))
#加載圖像數據
bg = pygame.image.load(r'.\images\background.png')
#通過blit來繪製圖像,從遊戲窗口screen的(0,0)處開始繪製
screen.blit(bg, (0,0))


#繪製自己的小飛機
hero = pygame.image.load(r'.\images\me1.png')
screen.blit(hero, (150,300))

#在繪製完所有圖像後,再統一調用update方法
pygame.display.update()


#創建時鐘對象
clock = pygame.time.Clock()

#定義rect記錄飛機的初始位置,102,126分別爲飛機圖片的寬高
hero_rect = pygame.Rect(150, 300, 102, 126)

while True:

    clock.tick(60)
    #捕獲事件
    event_list = pygame.event.get()
    if len(event_list) > 0:
        print(event_list)
        
    #修改飛機的位置
    hero_rect.y -= 1

    #判斷飛機位置
    if hero_rect.y <= 0:
        hero_rect.y = 700

    #調用blit方法繪製圖像
    screen.blit(bg, (0,0))#在每次繪製飛機之前,再將背景繪製一下
    screen.blit(hero, hero_rect)
    #調用update方法更新顯示
    pygame.display.update()

pygame.quit()

可以看到,我們將鼠標在遊戲界面上移動或者點擊之類的動作,都會給記錄下來:

在這裏插入圖片描述

監聽退出事件並且退出程序

那我們現在做一個用戶點擊程序的X按鈕,使程序能夠退出

import pygame

pygame.init()
#創建遊戲窗口 大小爲480 * 700
#繪製背景圖像
screen = pygame.display.set_mode((480,700))
#加載圖像數據
bg = pygame.image.load(r'.\images\background.png')
#通過blit來繪製圖像,從遊戲窗口screen的(0,0)處開始繪製
screen.blit(bg, (0,0))


#繪製自己的小飛機
hero = pygame.image.load(r'.\images\me1.png')
screen.blit(hero, (150,300))

#在繪製完所有圖像後,再統一調用update方法
pygame.display.update()


#創建時鐘對象
clock = pygame.time.Clock()

#定義rect記錄飛機的初始位置,102,126分別爲飛機圖片的寬高
hero_rect = pygame.Rect(150, 300, 102, 126)

while True:

    clock.tick(60)
    #監聽事件
    for event in pygame.event.get():
        #判斷事件類型是否是退出事件
        if event.type == pygame.QUIT:
            print("遊戲退出...")
            #quit卸載所有的模塊
            pygame.quit()
            #exit()退出程序
            exit()

    #修改飛機的位置
    hero_rect.y -= 1

    #判斷飛機位置
    if hero_rect.y <= 0:
        hero_rect.y = 700

    #調用blit方法繪製圖像
    screen.blit(bg, (0,0))#在每次繪製飛機之前,再將背景繪製一下
    screen.blit(hero, hero_rect)
    #調用update方法更新顯示
    pygame.display.update()

pygame.quit()

再點擊X按鈕,程序成功退出
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章