日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

Python?pygame項目實戰監聽退出事件_python

作者:ZacheryZHANG??????? ? 更新時間: 2022-10-09 編程語言

1. 事件監聽

首先,我們簡單回顧一下事件監聽,可以簡單概括如下:

  • 在游戲循環中,我們希望判斷用戶具體操作
  • 只有捕獲到用戶具體的操作,才能有針對性的做出響應
  • 簡而言之,在游戲循環中編寫一小段代碼,通過這一小段代碼,判斷用戶的具體操作行為,這個就叫做監聽

注意:我們想在游戲中實現監聽退出事件并且退出游戲,其實代碼非常固定(代碼形式都差不多),因為幾乎所有的pygame游戲都大同小異。

2. 案例演示

2.1 案例大體思路

代碼實現大體思路:首先,我們考慮在游戲循環內部再增加一個for循環,來檢測一下當前這一時刻到底發生了哪些事件。然后,在循環體內部,再增加一個條件判斷,判斷一下事件類型是否是pygame定義的QUIT事件(對應的就是用戶點擊的關閉按鈕)。一旦發現用戶點擊關閉按鈕,我們就可以在if語句下方,編寫代碼退出程序。

  • pygame.QUIT方法可以將所有pygame的模塊做一個卸載。
  • exit()將當前執行的程序直接退出,將當前正在執行的程序做一個終止。

2.2 代碼演示

具體代碼演示如下所示:可以在上一節(本專欄上一篇文章)中代碼的基礎上進行修改。

import pygame
pygame.init()

# 創建游戲的窗口 640*642
screen = pygame.display.set_mode((640, 642))

# 繪制背景圖像
bg = pygame.image.load("./飛機大戰資料包/images/background1.jpg")
screen.blit(bg, (0, 0))

# 繪制英雄的飛機
hero = pygame.image.load("./飛機大戰資料包/images/me1.png")
screen.blit(hero, (280, 500))

# 可以在所有繪制工作完成之后,統一調用update方法
pygame.display.update()

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

# 游戲循環->意味著游戲的正式開始

# 1. 定義rect記錄飛機的初始位置
hero_rect = pygame.Rect(280, 500, 102, 126)

# 游戲循環->意味著游戲的正式開始
while True:
    # 希望無限循環內部的代碼每秒鐘重復循環60次
    # 可以指定循環體內部的代碼執行的頻率
    clock.tick(60)

    # 監聽事件
    for event in pygame.event.get():
        # 判斷事件類型是否是退出事件
        if event.type == pygame.QUIT:
            print("游戲退出...")

            # quit卸載所有的模塊
            pygame.quit()

            # exit()直接終止當前正在執行的程序
            exit()

    # 2. 修改飛機的位置
    hero_rect.y -= 1
    # 判斷飛機的位置
    if hero_rect.y <= -126:
        hero_rect.y = 642

    # 3. 調用blit方法繪制圖像
    # 先繪制背景,在繪制飛機,就不會留下殘影(背景把上一次的飛機遮擋)
    screen.blit(bg, (0, 0))
    screen.blit(hero, hero_rect)

    # 4. 調用update方法更新顯示
    pygame.display.update()
pygame.quit()

2.3 運行結果

代碼運行結果如下圖所示:當運行程序后,點擊退出按鈕,可以正常終止屏幕中的游戲畫面,并且在控制臺輸出如下圖結果。

原文鏈接:https://juejin.cn/post/7131737672023801886

欄目分類
最近更新