天天看點

02-pygame 圖檔處理

你好,我是悅創。前面我們開始的為期 30天的更新挑戰第一篇,接下來我們是第二篇。第一篇的課程視訊,也已經在微信公衆号裡面了。有興趣的可以關注公衆号:AI悅創。

目錄

  1. 載入圖檔、調整大小
  2. 圖檔顯示規則
  3. 足球反彈

1. 載入圖檔、調整大小

案例 1:建立檔案,準備好兩個圖檔檔案(可自行下載下傳喜歡的圖檔,這兩個圖檔完整檔案名已經改為

football.png

background.jpg

),三個檔案放同一檔案夾内。然後編碼進行圖檔載入和調整大小。
02-pygame 圖檔處理

為了,友善後續的閱讀,退出處理部分已經寫成函數

quit()

寫成函數部分,我在零基礎一對一部分已經講解過了,如果有需要學 Python 零基礎一對一的人歡迎聯系報名,長期招收。

import pygame # 導入 pygame 庫
import sys # 導入系統庫,無需安裝
pygame.init() # 調用初始化函數
size = width, height = 600, 400
screen = pygame.display.set_mode(size)
pygame.display.set_caption('我的遊戲')

def quit(): # 把退出處理寫成函數,友善之後閱讀。
	for event in pygame.event.get():
		if event.type == pygame.QUIT:
			sys.exit()
# 使用變量儲存載入的圖檔,圖檔函數一般在 image 中
football = pygame.image.load('football.png') # 載入的圖檔會被認為是一層一層的面,稱為 surface
football = pygame.transform.smoothscale(football, (60, 60))
# ↑ 通過 transform 改變 surface 的大小,存回變量中

while True:
	quit() # 調用退出處理函數,判斷要不要退出
	# ↓ 使用 blit() 顯示圖檔,第二個參數是圖檔坐标
	screen.blit(football, (100, 100))
	pygame.display.update() # update 意為更新
           

代碼解析:

  • pygame 中的圖像相關函數在 image 裡,載入使用

    load()

  • 載入時填寫圖檔完整名稱,載入時的圖檔資料被視為一個表面(surface),這個面可以改變坐标和大小。
  • 顯示圖檔時,使用建立的螢幕來顯示(PS:我們的東西肯定是放在螢幕上面來顯示的)是以這裡用了 screen,顯示函數是

    blit()

    ,它有兩個參數,分别是要顯示的面和這坐标。

2. 圖檔顯示規則

  • 在 pygame 中采用螢幕左上角為坐标原點,向下為 y 正方向,向右為 x 正方向。
02-pygame 圖檔處理
  • 顯示圖檔的時候指定圖檔坐标,也是圖檔的左上角,surface 預設

    (0, 0)

  • 先顯示的圖檔會被後面顯示的圖檔覆寫住,是以背景圖檔要先顯示。
bg = pygame.image.load('background.jpg')
bg = pygame.transform.smoothscale(bg, (600, 400))
           
screen.blit(bg, (0, 0)) # 從左上角開始顯示背景圖檔
           

為了,防止小白不了解,不知到代碼放在哪裡,下面放上代碼圖檔:

02-pygame 圖檔處理

注意:

載入背景圖檔後,設定為視窗一樣的大小,然後将坐标設為

(0, 0)

,此時正好鋪滿背景。

3. 足球反彈

案例 2: 讓足球在球場中運動,碰到邊界就反彈,在原理的代碼上做如下的修改。

我來提示一下:

我們知道圖檔顯示的位置依靠坐标來定決定,那麼坐标變化就意味着圖檔的運動。

圖檔坐标要變化,寫定的數值顯然是不可以的,是以用變量來表示坐标和對應的速度。

碰到邊界實際上就是坐标超出了螢幕的大小了,需要注意圖檔上下左右的坐标,要考慮圖檔的尺寸。

這裡我就直接放在完整代碼:

import pygame, sys

pygame.init()
# 建立遊戲視窗大小
size = width, height = 600,400
screen = pygame.display.set_mode(size)
# 設定視窗标題
pygame.display.set_caption("我的世界")
# 加載足球圖像
football = pygame.image.load(r'football.png')
# 調整圖像的大小
football = pygame.transform.smoothscale(football, (width//6, height//4))
# 加載背景圖檔
background = pygame.image.load(r'background.jpg').convert_alpha()
# 調整圖像的大小
background = pygame.transform.smoothscale(background, (width, height))

# 設定遊戲的圖示
pygame.display.set_icon(football)
# 擷取圖像的外切矩形
ball_rect = football.get_rect()
# 定義速度
speed = [1,1]
# 建立顔色
bgcolor = pygame.Color('black')
# 建立控制頻率的clock
fclock = pygame.time.Clock()
# 定義重新整理頻率
fps = 300
while True:
    # 處理退出事件
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            sys.exit()
    # 設定背景的顔色
    screen.fill(bgcolor)
    # 繪制背景圖檔
    screen.blit(background, (0, 0))
    # 設定足球的運動
    ball_rect = ball_rect.move(speed[0], speed[1])
    # 足球的上邊Y軸坐标<0或者足球的下邊的Y軸坐标>建立視窗的高度
    if ball_rect.top < 0 or ball_rect.bottom >height:
        speed[1] = -speed[1]
    # 足球的左邊的X坐标<X軸的0坐标或者右邊的坐标>建立視窗寬度
    if ball_rect.left < 0 or ball_rect.right > width:
        speed[0] = -speed[0]
    # 在螢幕中的矩形中繪制圖形
    screen.blit(football, ball_rect)
    # 重新整理遊戲場景
    pygame.display.update()
    # 控制遊戲場景重新整理率
    fclock.tick(fps)