python游戲庫(kù)pygame經(jīng)典教程(推薦!)
一.Pygame程序基本搭建過(guò)程
Pygame搭建游戲窗口主要為如下幾步
1.初始化化程序
在使用Pygame編程之前,我們要對(duì)程序進(jìn)行初始化,代碼如下
pygame.init()
該代碼是整個(gè)程序的第一句代碼,它的作用是自動(dòng)檢測(cè)Pygame軟件包是否正常,并完成包括display(顯卡模塊),font(字體模塊),mixer(聲音模塊),cursors(光標(biāo)控制模塊)等的模塊的初始化
2.創(chuàng)建Surface對(duì)象
Surface是Pygame編程的窗口界面,類似畫(huà)布,圖像和文本可以顯示在Surface上,創(chuàng)建方式主要有以下方式
(1)創(chuàng)建Surface對(duì)象:
#也可以叫做screen對(duì)象,本質(zhì)上是一個(gè)Surface對(duì)象 screen = pygame.display.set_mode(400,400)
(2)創(chuàng)建一個(gè)帶文本的Surface對(duì)象:
#創(chuàng)建一個(gè)包含文字的Surface對(duì)象
text = f.render("小馬哥不馬虎",True,(255,255,255),(0,0,0))
#通過(guò)blit方法將其繪制出來(lái),textRect表示位置坐標(biāo)
screen.blit(text,textRect)(3)創(chuàng)建一個(gè)包含圖像的Surface對(duì)象:
surface_image = pygame.image.load("圖片路徑")3.事件監(jiān)聽(tīng)
一個(gè)好的游戲少不了游戲與人的交互,通過(guò)事件,人按自己的想法對(duì)游戲進(jìn)行交互
如下是一個(gè)關(guān)閉游戲的簡(jiǎn)單交互:
#所有g(shù)et()獲取事件
for event in pygame.event.get():
#判斷事件類型
if event.type == pygame.QUIT:
pygame.quit()4.游戲循環(huán)
代碼:
while True:
for event in pymage.event.get():
if event.type == pygame.QUIT:
pymage.quit()
sys.exit()
#更新并繪制屏幕內(nèi)容
pygame.display.flip()二.Pygame Display顯示模塊詳解
Pygame使用pygame.display顯示模塊中的方法創(chuàng)建游戲的主窗口:
格式:
screen = pygame.display.set_mode(size=(),flags=0)
·size:用來(lái)設(shè)置窗口的大小
·flags:功能標(biāo)志位,表示創(chuàng)建的主窗口樣式,flags參數(shù)如下:
flags參數(shù)
| 標(biāo)志位 | 功能 |
| pygame.FULLSCREEN | 創(chuàng)建一個(gè)全屏窗口 |
| pygame.HWSURFACE | 創(chuàng)建一個(gè)硬件加速窗口,必須和FULLSCREEN同時(shí)使用 |
| pygame.OPENGL | 創(chuàng)建一個(gè)OPENGL渲染窗口 |
| pygame.RESIZABLE | 創(chuàng)建一個(gè)可以改變大小的窗口 |
| pygame.DOUBLEBUF | 創(chuàng)建一個(gè)雙緩沖窗口,建議在HWSURFACE或OPENGL時(shí)使用 |
| pygame.NOFRAME | 創(chuàng)建一個(gè)沒(méi)有邊框的窗口 |
1.將Surface對(duì)象粘貼至主窗口上
代碼:
scrren.blit(source,dest,area=None,special_flage=0)
·source:表示要粘貼的Surface對(duì)象
·dest:主窗口一個(gè)標(biāo)識(shí)的坐標(biāo)位置
·area:接受一個(gè)Rect對(duì)象,默認(rèn)為None,如果提供該參數(shù)則相當(dāng)于摳圖操作,即在屏幕的指定位置顯示想要的內(nèi)容
·special_flags:可選參數(shù),用于指定對(duì)應(yīng)位置顏色的混合方式
2.設(shè)置窗口主窗口
screen = pygame.display.set_mode(400,400)
3.填充主窗口背景,參數(shù)值RGB
screen.fill((156,156,156))
4.設(shè)置窗口標(biāo)題
pygame.display.set.caption('小馬哥不馬虎')5.更新屏幕內(nèi)容
pygame.display.flip()
6.pygame.display其他方法
| 方法名稱 | 說(shuō)明 |
| pygame.display.get_surface() | 獲取當(dāng)前顯示的Surface對(duì)象 |
| pygame.display.flip() | 更新整個(gè)待顯示的Surface對(duì)象到屏幕上 |
| pygame.display.update() | 更新部分軟件界面顯示 |
| pygame.display.lnfo() | 產(chǎn)生一個(gè)VideInfo對(duì)象,包含了顯示界面的相關(guān)信息 |
| pygame.display.set_icon() | 設(shè)置左上角的游戲圖標(biāo),圖標(biāo)尺寸大小為32*32 |
| pygame.display.iconify() | 將顯示的主窗口即Surface對(duì)象最小化,或者隱藏 |
| pygame.display.get_active() | 當(dāng)前顯示界面顯示在屏幕上時(shí)返回True,如果窗口被隱藏和最小化時(shí)則返回False |
三.Pygame Surface創(chuàng)建圖像
1.Surface模塊創(chuàng)建圖像
語(yǔ)法格式:
Surface=pygame.Surface(size=(width,height),flags,depth)
·size:表示Surface對(duì)象的矩形區(qū)域大小
·flage:功能標(biāo)志位,有兩個(gè)可選參數(shù)值HWSURFACE和SPCALPHA,前者代表將創(chuàng)建的Surface對(duì)象存放于顯存中,后者表示讓圖像的每一個(gè)像素包含一個(gè)alpha通道
·depth:指定像素的顏色深度,默認(rèn)為自適應(yīng)模式,由Pygame自動(dòng)調(diào)節(jié)
代碼實(shí)例:
import pygame
import sys
pygame.init()
#設(shè)置主窗口
screen = pygame.display.set_mode((400,400))
screen.fill('blue')
#設(shè)置窗口標(biāo)題
pygame.display.set_caption('小馬哥不馬虎')
#創(chuàng)建一個(gè)圖像
face = pygame.Surface((60,60),flags=pygame.HWSURFACE)
#填充圖像
face.fill(color='pink')
while True:
for event in pygame.event.get():
if event.type==pygame.QUIT:
pygame.quit()
sys.exit()
#將圖像添加到主屏幕上
screen.blit(face,(100,100))
#更新屏幕內(nèi)容
pygame.display.flip()效果:

2.Surface從外部加載圖像
語(yǔ)法格式:
pygame.image.load('圖片路徑').convert()
代碼實(shí)例:
import pygame
import sys
pygame.init()
#設(shè)置主窗口
screen = pygame.display.set_mode((400,400))
screen.fill('white')
#設(shè)置窗口標(biāo)題
pygame.display.set_caption('小馬哥不馬虎')
#加載圖片
image_surface = pygame.image.load('C:/Users/myun/Pictures/不知火舞.jpg')
image_surface.fill((0,0,255),rect=(100,100,100,50),special_flags=0)
image_surface.scroll(100,60) #移動(dòng)圖片
while True:
for event in pygame.event.get():
if event.type==pygame.QUIT:
pygame.quit()
sys.exit()
#將圖像添加到主屏幕上
screen.blit(image_surface,(0,0))
#更新屏幕內(nèi)容
pygame.display.flip()效果圖:

Surface模塊處理圖像方法:
| 方法 | 說(shuō)明 |
| pygame.Surface.blit() | 將一個(gè)圖像繪制到另一個(gè)圖像上 |
| pygame.Surface.convert() | 修改圖像的格式 |
| pygame.Surface.fill() | 使用純色填充Surface圖像 |
| pygame.Surface.scroll() | 復(fù)制并移動(dòng)Surface對(duì)象 |
| pygame.Surface.set_alpha() | 設(shè)置整個(gè)圖像的透明度 |
| pygame.Surface.get_at() | 獲取一個(gè)像素的顏色值 |
| pygame.Surface.set_at() | 設(shè)置一個(gè)像素的顏色值 |
| pygame.Surface.get_palette() | 獲取Surface對(duì)象8位索引的調(diào)色板 |
| pygame.Surface.map_rgb() | 將一個(gè)RGBA顏色轉(zhuǎn)換為映射的顏色值 |
| pygame.Surface.set_clip() | 設(shè)置該Surface對(duì)象的剪切區(qū)域 |
| pygame.Surface.subsurface() | 根據(jù)父對(duì)象創(chuàng)建一個(gè)新的子Surface對(duì)象 |
| pygame.Surface.get_offset() | 獲取子Surface對(duì)象在父對(duì)象中的偏移量 |
| pygame.Surface.get_size() | 獲取Surface對(duì)象的大小 |
四.Pygame Transform圖像變形
Transform方法
| 方法 | 說(shuō)明 |
| pygame.transform.scale() | 將圖片縮放至指定的大小,并返回一個(gè)新的Surface對(duì)象 |
| pygame.transform.rotate() | 將圖片旋轉(zhuǎn)至指定角度 |
| pygame.transform.rotozoom() | 以角度旋轉(zhuǎn)圖像,同時(shí)將圖像縮小或放大至指定的倍數(shù) |
五.Pygame Time時(shí)間控制
1.游戲暫停
Pygame.time模塊提供以下常用方法
| 方法 | 說(shuō)明 |
| pygam.time.get_ticks() | 以毫秒為單位獲取時(shí)間 |
| pygame.time.wait() | 使程序暫停一段時(shí)間 |
| pygame.time.set_time() | 創(chuàng)建一個(gè)定時(shí)器,即每隔一段時(shí)間就去執(zhí)行一些動(dòng)作 |
| pygame.time.Clock() | 創(chuàng)建一個(gè)時(shí)間對(duì)象來(lái)幫助我們確定游戲要以多大的幀數(shù)運(yùn)行 |
代碼實(shí)例:
import pygame
pygame.init()
screen =pygame.display.set_mode((500,400))
pygame.display.set_caption('時(shí)間設(shè)置')
#獲取時(shí)間
t=pygame.time.get_ticks()
#暫停游戲3000毫秒
t1=pygame.time.wait(3000)
print(t1)
image_surface=pygame.image.load('C:/Users/myun/Pictures/不知火舞.jpg')
while True:
for event in pygame.event.get():
if event.type==pygame.QUIT:
exit()
screen.blit(image_surface,(0,0))
pygame.display.update()效果:三秒后加載圖片
2.設(shè)置游戲的幀數(shù)率(FPS)
Clock()方法可以實(shí)現(xiàn)對(duì)游戲幀數(shù)的設(shè)置
| 方法 | 說(shuō)明 |
| pygame.time.Clock.tick() | 更新clock對(duì)象 |
| pygame.time.Clock.get_time() | 獲取上一個(gè)tick中的時(shí)間 |
| pygame.time.Clock.get_fps() | 計(jì)算clock對(duì)象的幀數(shù) |
代碼實(shí)例:
import pygame
pygame.init()
screen =pygame.display.set_mode((500,400))
pygame.display.set_caption('時(shí)間設(shè)置')
#獲取時(shí)間
t=pygame.time.get_ticks()
#暫停游戲3000毫秒
t1=pygame.time.wait(3000)
print(t1)
image_surface=pygame.image.load('C:/Users/myun/Pictures/不知火舞.jpg')
#創(chuàng)建時(shí)間對(duì)象
clock = pygame.time.Clock()
while True:
#通過(guò)時(shí)間對(duì)象指定循環(huán)幀數(shù),每秒循環(huán)60次
clock.tick(60)
for event in pygame.event.get():
if event.type==pygame.QUIT:
exit()
screen.blit(image_surface,(0,0))
pygame.display.update()注:游戲幀數(shù)中在動(dòng)態(tài)圖時(shí)才顯現(xiàn)出來(lái)
六.Pygame Rect區(qū)域位置
Rect()方法創(chuàng)建一個(gè)指定位置,指定大小的矩形區(qū)域
語(yǔ)法格式:
Rect=pygame.Rect(left,top,width,height)
代碼實(shí)例:
import pygame
pygame.init()
screen = pygame.display.set_mode((500,300))
pygame.display.set_caption('小馬哥不馬虎')
image_surface = pygame.image.load("C:/Users/myun/Pictures/bg.jpg")
rect1 = pygame.Rect(50,50,100,100)
# 在原圖的基礎(chǔ)上創(chuàng)建一個(gè)新的子圖(surface對(duì)象)
image_child= image_surface.subsurface(rect1)
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
exit()
#在屏幕上顯示子圖的區(qū)域
screen.blit(image_child,rect1)
pygame.display.update()效果:在圖片上截取了一個(gè)和Rect1同樣大小的矩形區(qū)域

Rect對(duì)其他常用方法:
| 方法 | 說(shuō)明 |
| pygame.Rect.copy() | 復(fù)制矩形 |
| pygame.Rect.move() | 移動(dòng)矩形區(qū)域,接受一個(gè)列表參數(shù) |
| pygame.Rect.move_ip() | 移動(dòng)矩形(無(wú)返回) |
| pygame.Rect.inflate() | 增大或縮小矩形 |
| pygame.Rect.clamp() | 將矩形移動(dòng)到另一個(gè)矩形內(nèi) |
| pygame.Rect.union() | 返回兩個(gè)矩形合并后的矩形 |
| pygame.Rect.fit() | 按橫縱比調(diào)整矩形或移動(dòng)矩形 |
| pygame.Rect.contains() | 測(cè)試一個(gè)矩形是否在另個(gè)矩陣內(nèi) |
| pygame.Rect.collidepoint() | 測(cè)試點(diǎn)是否在矩形中 |
| pygame.Rect.colliderect() | 測(cè)試兩個(gè)矩形是否重疊 |
七.Pygame Event事件模塊
1.事件類型
通過(guò)事件類型,可以有序的,逐一的處理用戶的操作
事件
| 事件類型 | 描述 | 成員屬性 |
| QOUIT | 用戶按下窗口的關(guān)閉按鈕 | none |
| ATIVEEVENT | Pygame被激活或者隱藏 | gain,state |
| KEYDOWN | 鍵盤按下 | unicode,key,mod |
| KEYUP | 鍵盤釋放 | key,mod |
| MOUSEMOTION | 鼠標(biāo)移動(dòng) | pos,rel,button |
| MOUSEBUTTONDOWN | 鼠標(biāo)按下 | pos,button |
| MOUSEBUTTONUP | 鼠標(biāo)放開(kāi) | pos,button |
| JOYAXISMOTION | 游戲手柄(Joystick or pad)移動(dòng) | joy,axis,value |
| JOYBALLMOTION | 游戲球(Joy ball)移動(dòng) | joy,axis,value |
| JOYHATMOTION | 游戲手柄(Joystick)移動(dòng) | joy,axis,value |
| JOYBUTTONDOWN | 游戲手柄按下 | joy,button |
| JOYBUTTONUP | 游戲手柄放開(kāi) | joy,button |
| VIDEORESIZE | pygame窗口縮放 | size,w,h |
| VIDEOEXPOSE | Pygame窗口部分公開(kāi) | none |
| USEREVENT | 觸發(fā)一個(gè)用戶事件 | 事件代碼 |
2.事件處理方法
Pygam.event模塊提供了處理事件的常用方法,如下:
| 方法 | 說(shuō)明 |
| pygame.event.get() | 從事件隊(duì)列獲取一個(gè)事件,并在事件隊(duì)列中刪除該事件 |
| pygame.event.wait() | 阻塞直至事件發(fā)生才會(huì)繼續(xù)執(zhí)行,若沒(méi)有事件發(fā)生將一直處于阻塞狀態(tài) |
| pygame.event.set_blocked() | 控制哪些事件禁止進(jìn)入隊(duì)列,如果參數(shù)值為None,則表示禁止所有事件進(jìn)入 |
| pygame.event.pump() | 調(diào)用該方法后,Pygame會(huì)自動(dòng)處理事件隊(duì)列 |
| pygame.event.poll() | 會(huì)根據(jù)實(shí)際情況返回一個(gè)真實(shí)的事件,或者一個(gè)None |
| pygame.event.peek() | 檢測(cè)某類事件是否在隊(duì)列中 |
| pygame.event.clear() | 從隊(duì)列中清除所有的事件 |
| pygame.event.get_blocked() | 檢測(cè)某一類型的事件是否被禁止進(jìn)入隊(duì)列 |
| pygame.event.post() | 放置一個(gè)新的事件在隊(duì)列中 |
| pygame.event.Event() | 創(chuàng)建一個(gè)用戶自定義的事件 |
| pygame.event.set_allowed() | 控制哪些事件允許進(jìn)入隊(duì)列 |
3.處理鍵盤事件
鍵盤事件通過(guò)一個(gè)key屬性,通過(guò)該屬性可以獲取鍵盤的按鍵,如下是鍵盤按鍵的常量:
| 常量名 | 描述 |
| K_BACKSPACE | 退格鍵(Backspace) |
| K_TAB | 制表鍵(Tab) |
| K_CLEAR | 清除鍵(Clear) |
| K_RETURN | 回車鍵(Enter) |
| K_PAUSE | 暫停鍵(Pause) |
| K_ESCAPE | 退出鍵(Escape) |
| K_SPACE | 空格鍵(Space) |
| K_0~K_9 | 0~9 |
| K_a~k_z | a~z |
| K_DELETE | 刪除鍵(delete) |
| K_KP0~K_KP9 | 小鍵盤的0~9 |
| K_F1~K_F15 | F1~F15 |
| K_UP | 向上箭頭 |
| K_DOWN | 向下箭頭 |
| K_RIGHT | 向右箭頭 |
| K_LEFT | 向左箭頭 |
| KMOD_ALT | 同時(shí)按下Alt鍵 |
4.處理鼠標(biāo)事件
| 事件 | 說(shuō)明 |
| MOUSEMOTION | 鼠標(biāo)按下 |
| MOUSEBUTTONDOWN | 鼠標(biāo)釋放 |
| MOUDEBUTTONUP | 鼠標(biāo)釋放 |
import pygame
from random import randint
# 初始化程序
pygame.init()
screen = pygame.display.set_mode((450,400))
# 更新顯示
pygame.display.flip()
while True:
#等待事件發(fā)生
event = pygame.event.wait()
if event.type == pygame.QUIT:
exit("成功退出")
if event.type == pygame.MOUSEBUTTONDOWN:
# pos 獲取鼠標(biāo)當(dāng)前位置
print('鼠標(biāo)按下',event.pos)
mx,my = event.pos
# 調(diào)用 pygame.draw 模塊畫(huà)圓
pygame.draw.circle(screen,(255,255,0),(mx,my),50)
# 處理完,更新顯示
pygame.display.update()
if event.type == pygame.MOUSEBUTTONUP:
print('鼠標(biāo)彈起')
pass
if event.type == pygame.MOUSEMOTION:
print('鼠標(biāo)移動(dòng)')
mx, my = event.pos
# 隨機(jī)生成 RGB 顏色值
r = randint(0,255)
g = randint(0,255)
b = randint(0,255)
pygame.draw.circle(screen, (r,g,b,),(mx, my), 50)
# 處理完,更新顯示
pygame.display.update()八.Pygame Dra繪圖函數(shù)
1.繪制矩形
語(yǔ)法格式:
pygame.draw.rect(surface,color,rect,width)
·surface:指主窗口
·color:該參數(shù)用于圖形著色
·rect:繪制圖形的位置和大小
·width:可選參數(shù),指定邊框的寬度,默認(rèn)為0,表示填充該矩形區(qū)域
注:當(dāng)width>0時(shí),表示線框的寬度,而width<0時(shí),此時(shí)不會(huì)繪制任何圖形
2.繪制多邊形
語(yǔ)法格式:
pygame.draw.polygon(surface,color,points,width)
其余參數(shù)與上面相同,points表示組成多邊形的多個(gè)(x,y)坐標(biāo)
3.繪制圓形
語(yǔ)法格式:
pygame.circle(surface,color,pos,radius,width=0)
·pos:該參數(shù)用來(lái)指定圓心的位置
·radius:用來(lái)指定圓的半徑
4.繪制橢圓形
語(yǔ)法格式:
pygame.draw.ellipse(surface,Rect,width=0)
5.繪制圓弧曲線
語(yǔ)法格式:
pygame.draw.arc(Surface,color,Rect,start_angle,stop_angle,width=1)
·start_angle:該段該段圓弧的起始角度
·stop_angle:終止角度
6.繪制直線
語(yǔ)法格式:
一條直線:
pygame.draw.line(surface,color,start_pos,end_pos,width=1)·start_pos和end_pos:表示線段的起始位置和結(jié)束位置(x,y)
·width=1:表示直線的寬度,默認(rèn)為1
一條消除鋸齒的平滑線:
pygame.aaline(surface,color,start_pos,end_pos,blend=1)
多條直線:
pygame.line(surface,color,closed,pointlist,width=1)·pointlist:參數(shù)列表,包含了一些列點(diǎn)坐標(biāo)的列表
·closed:布爾參數(shù),如果設(shè)置為True,表示直線的第一個(gè)端點(diǎn)和直線的最后一個(gè)端點(diǎn)要首尾相連
多條抗鋸齒直線:
pygame.draw.aalines(surface,color,closed,pointlist,blend=1)
繪圖方法總匯:
pygame.draw模塊繪圖方法
| 方法 | 說(shuō)明 |
| pygame.draw.rect() | 繪制矩陣 |
| pygame.draw.polygon() | 繪制多邊形 |
| pygame.draw.circle() | 根據(jù)圓心和半徑繪制圓形 |
| pygame.draw.ellipse() | 繪制一個(gè)橢圓形 |
| pygame.draw.arc() | 繪制弧線 |
| pygame.draw.line() | 繪制線段 |
| pygame.draw.ines() | 繪制多條連續(xù)的線段 |
| pygame.draw.aaline() | 繪制一條平滑的線段(抗鋸齒) |
| pygame.draw.aalines() | 繪制多條連續(xù)的線段 |
代碼實(shí)例:
import pygame
from math import pi
#初始化
pygame.init()
# 設(shè)置主屏幕大小
size = (500, 450)
screen = pygame.display.set_mode(size)
# 設(shè)置一個(gè)控制主循環(huán)的變量
done = False
#創(chuàng)建時(shí)鐘對(duì)象
clock = pygame.time.Clock()
while not done:
# 設(shè)置游戲的fps
clock.tick(10)
for event in pygame.event.get():
if event.type == pygame.QUIT:
done = True # 若檢測(cè)到關(guān)閉窗口,則將done置為True
# 繪制一條寬度為 3 的紅色對(duì)角線
pygame.draw.line(screen, (0, 255, 0), [0, 0], (500, 450), 3)
# 繪制多條藍(lán)色的直線(連續(xù)直線,非抗鋸齒),F(xiàn)alse 表示首尾不相連
pygame.draw.lines(screen, (0, 0, 255), False, [[0, 80], [50, 90], [200, 80], [220, 30]], 1)
# 繪制一個(gè)灰色的矩形區(qū)域,以灰色填充區(qū)域
pygame.draw.rect(screen, (155, 155, 155), (75, 10, 50, 20), 0)
# 繪制一個(gè)線框?qū)挾葹?的矩形區(qū)域
pygame.draw.rect(screen, (0, 0, 0), [150, 10, 50, 20],2)
# 繪制一個(gè)橢圓形,其線寬為2
pygame.draw.ellipse(screen, (255, 0, 0), (225, 10, 50, 20), 2)
# 繪制一個(gè)實(shí)心的紅色橢圓形
pygame.draw.ellipse(screen, (255, 0, 0), (300, 10, 50, 20))
# 繪制一個(gè)綠色邊框(寬度為2)三角形
pygame.draw.polygon(screen, (100, 200, 45), [[100, 100], [0, 200], [200, 200]], 2)
# 繪制一個(gè)藍(lán)色實(shí)心的圓形,其中[60,250]表示圓心的位置,40為半徑,width默認(rèn)為0
pygame.draw.circle(screen, (0, 0, 255), [60, 250], 40)
# 繪制一個(gè)圓弧,其中0表示弧線的開(kāi)始位置,pi/2表示弧線的結(jié)束位置,2表示線寬
pygame.draw.arc(screen, (255, 10, 0), (210, 75, 150, 125), 0, pi / 2, 2)
# 刷新顯示屏幕
pygame.display.flip()
# 點(diǎn)擊關(guān)閉,退出pygame程序
pygame.quit()效果圖:

九.字體繪制
font模塊可以繪制字體
·pygame.font.Font(filename,size):獲取字體
·pygame.font.Font.render(text,antialias,color,background=None):顯示字體
·get_rect():獲取坐標(biāo)對(duì)象
實(shí)例:
import pygame,sys
from pygame.locals import *
pygame.init()
surface = pygame.display.set_mode((500, 400), 0, 32)
pygame.display.set_caption("文字繪制")
surface.fill((255, 255, 255))
# 獲取字體對(duì)象,可以獲取系統(tǒng)自帶的,也可以自定義字體
fonts = pygame.font.get_fonts()
fonts = 'fonts/ARBERKLEY.ttf'
basicFont = pygame.font.SysFont(fonts, 50)
# surface對(duì)象
text = basicFont.render('這是一串字符', True, (255,255,255), (0,255,0))
# 設(shè)置文本位置
textRect = text.get_rect()
textRectObj.center = (250, 200)
# 將渲染的surface對(duì)象更新到屏幕上
surface.blit(text,textRect)
# 程序主循環(huán)
while True:
# 獲取事件
for event in pygame.event.get():
# 判斷事件是否為退出事件
if event.type == QUIT:
# 退出pygame
pygame.quit()
# 退出系統(tǒng)
sys.exit()
# 繪制屏幕內(nèi)容
pygame.display.update()十.音頻播放
mixer音頻模塊
·pygame.mixer.Sound(filename):播放特效音
·pygame.mixer.music.load(filename):加載背景音樂(lè)
代碼實(shí)例:
import pygame, sys
from pygame.locals import *
# 初始化pygame
pygame.init()
# 設(shè)置窗口的大小,單位為像素
screen = pygame.display.set_mode((500, 400))
# 設(shè)置窗口的標(biāo)題
pygame.display.set_caption('音頻播放')
# 設(shè)置背景
screen.fill((255, 255, 255))
# 加載并播放一個(gè)特效音頻文件
sound = pygame.mixer.Sound('C:/Users/myun/Music/狙擊槍.wav')
sound.play()
# 加載背景音樂(lè)文件
pygame.mixer.music.load('C:/Users/myun/Music/Oh The Larceny - Light That Fire.mp3')
# 播放背景音樂(lè),第一個(gè)參數(shù)為播放的次數(shù)(-1表示無(wú)限循環(huán)),第二個(gè)參數(shù)是設(shè)置播放的起點(diǎn)(單位為秒)
pygame.mixer.music.play(-1, 0.0)
# 程序主循環(huán)
while True:
# 獲取事件
for event in pygame.event.get():
# 判斷事件是否為退出事件
if event.type == QUIT:
# 停止播放背景音樂(lè)
pygame.mixer.music.stop()
# 退出pygame
pygame.quit()
# 退出系統(tǒng)
sys.exit()
# 繪制屏幕內(nèi)容
pygame.display.update()總結(jié)
到此這篇關(guān)于python游戲庫(kù)pygame經(jīng)典教程的文章就介紹到這了,更多相關(guān)python游戲庫(kù)pygame內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- python pygame實(shí)現(xiàn)五子棋小游戲
- python實(shí)現(xiàn)飛機(jī)大戰(zhàn)游戲(pygame版)
- python使用pygame模塊實(shí)現(xiàn)坦克大戰(zhàn)游戲
- python實(shí)現(xiàn)五子棋游戲(pygame版)
- python使用pygame框架實(shí)現(xiàn)推箱子游戲
- Python加pyGame實(shí)現(xiàn)的簡(jiǎn)單拼圖游戲?qū)嵗?/a>
- 使用Python第三方庫(kù)pygame寫個(gè)貪吃蛇小游戲
- python pygame 憤怒的小鳥(niǎo)游戲示例代碼
- python3 pygame實(shí)現(xiàn)接小球游戲
- Python3+Pygame實(shí)現(xiàn)射擊游戲完整代碼
相關(guān)文章
python運(yùn)行cmd命令10種方式并獲得返回值的高級(jí)技巧
這篇文章主要給大家介紹了關(guān)于python運(yùn)行cmd命令10種方式并獲得返回值的高級(jí)技巧,主要包括python腳本執(zhí)行CMD命令并返回結(jié)果的例子使用實(shí)例、應(yīng)用技巧,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-03-03
一篇文章帶你詳細(xì)了解python中一些好用的庫(kù)
這篇文章主要推薦了一些好用的Python庫(kù),都有這不錯(cuò)的群眾基礎(chǔ),非常好用,也都很實(shí)用,推薦給大家,希望能夠給你帶來(lái)幫助2021-09-09
利用Tensorboard繪制網(wǎng)絡(luò)識(shí)別準(zhǔn)確率和loss曲線實(shí)例
今天小編就為大家分享一篇利用Tensorboard繪制網(wǎng)絡(luò)識(shí)別準(zhǔn)確率和loss曲線實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-02-02
python自動(dòng)化測(cè)試selenium屏幕截圖示例
這篇文章主要為大家介紹了python自動(dòng)化測(cè)試selenium屏幕截圖示例實(shí)現(xiàn),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步2021-11-11
用Python實(shí)現(xiàn)斐波那契(Fibonacci)函數(shù)
這篇文章主要介紹了用Python實(shí)現(xiàn)斐波那契(Fibonacci)函數(shù)的相關(guān)資料,需要的朋友可以參考下2016-03-03
python網(wǎng)絡(luò)編程:socketserver的基本使用方法實(shí)例分析
這篇文章主要介紹了python網(wǎng)絡(luò)編程:socketserver的基本使用方法,結(jié)合實(shí)例形式分析了python網(wǎng)絡(luò)編程中socketserver的基本功能、使用方法及操作注意事項(xiàng),需要的朋友可以參考下2020-04-04
用pandas劃分?jǐn)?shù)據(jù)集實(shí)現(xiàn)訓(xùn)練集和測(cè)試集
這篇文章主要介紹了用pandas劃分?jǐn)?shù)據(jù)集實(shí)現(xiàn)訓(xùn)練集和測(cè)試集,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-07-07

