1. 畫布surface
我們先啟動(dòng)一個(gè)窗口
import pygame
pygame.init() # 初始化
screen = pygame.display.set_mode((800,600)) # 設(shè)置窗口的大小
pygame.display.set_caption("這是一個(gè)給我們畫畫用的窗口") # 設(shè)置窗口的title
pygame.quit()
我們通過(guò)screen = pygame.display.set_mode((800,600))
設(shè)置了一個(gè)窗口,并且返回了一個(gè)screen
的變量,這個(gè)變量的類型是pygame.Surface
,也就是一個(gè)畫布。我們基于這個(gè)畫布來(lái)作畫,例如加載一個(gè)圖片到這個(gè)畫布上,或者繪制一個(gè)圓。
2. 繪制一個(gè)圓
我們發(fā)現(xiàn)這個(gè)窗口一閃而過(guò),什么也沒(méi)看清。因?yàn)榧虞d完變量就釋放掉了,我們加一個(gè)循環(huán),讓其等待10s。
import pygame
import time
pygame.init()
screen = pygame.display.set_mode((800,600))
pygame.display.set_caption("這是一個(gè)給我們畫畫用的窗口")
pygame.draw.circle(screen,(255,0,0),(200,300),20)
for _ in range(10):
time.sleep(1)
pygame.quit()
可以看到過(guò)了10s這個(gè)黑框才關(guān)閉掉,由于sleep和繪制都在同一個(gè)線程中,發(fā)現(xiàn)頁(yè)面會(huì)處于卡死狀態(tài)。同時(shí)發(fā)現(xiàn)調(diào)用pygame.draw.circle
繪制的圓也沒(méi)有出現(xiàn),這是因?yàn)槲覀儧](méi)有調(diào)用繪制函數(shù)。
pygame.draw.circle(Surface, color, pos , raduis, width)
通常情況下,我們會(huì)繪制各種各樣的圖形,如果畫一個(gè)刷新一個(gè)就會(huì)導(dǎo)致效率很低,所以一般情況下都是把所有的東西繪制完成之后再統(tǒng)一進(jìn)行刷新。
import pygame
import time
pygame.init()
screen = pygame.display.set_mode((800,600))
pygame.display.set_caption("這是一個(gè)給我們畫畫用的窗口")
pygame.draw.circle(screen,(255,0,0),(200,300),20)
pygame.draw.circle(screen,(255,0,0),(300,200),20)
pygame.display.update()
for _ in range(10):
time.sleep(1)
pygame.quit()
3. 繪制變化大小的圓
現(xiàn)在我們想要繪制一個(gè)圓,這個(gè)圓的大小可以變化,這很簡(jiǎn)單,只要不斷改變圓的半徑就可以了。圓的半徑變大了,也就是說(shuō)繪制的內(nèi)容發(fā)生了變化,因此我們需要更新畫布
import pygame
import time
pygame.init()
screen = pygame.display.set_mode((800,600))
pygame.display.set_caption("這是一個(gè)給我們畫畫用的窗口")
r = 20
for _ in range(10):
time.sleep(1)
pygame.draw.circle(screen,(255,0,0),(200,300),r)
r += 10
pygame.display.update()
pygame.quit()
等了10s又退出來(lái),反正我們要一直現(xiàn)實(shí),就改成死循環(huán),你會(huì)發(fā)現(xiàn)圓是變大了,但是程序卻退不出來(lái)了
r = 20
while True:
pygame.draw.circle(screen,(255,0,0),(200,300),r)
r += 1
pygame.display.update()
pygame.quit() # 由于死循環(huán),所以執(zhí)行不到這一步
4. 事件
pygame提供了事件來(lái)與用戶進(jìn)行交互,例如點(diǎn)擊鼠標(biāo),打字等等。所有的事件都會(huì)放到pygame的事件隊(duì)列中,我們只要不斷讀取這個(gè)隊(duì)列就可以了
r = 20
while True:
for event in pygame.event.get(): # 遍歷事件
if event.type == pygame.QUIT: # 退出事件
pygame.quit()
pygame.draw.circle(screen,(255,0,0),(200,300),r)
r += 1
pygame.display.update()
當(dāng)我們發(fā)現(xiàn)有關(guān)閉事件的時(shí)候就退出pygame。但是通常不會(huì)這么寫,直接退出pygame會(huì)導(dǎo)致我們有些資源可能來(lái)不及釋放,所以通常會(huì)寫成
r = 20
going = True
while going:
for event in pygame.event.get(): # 遍歷事件
if event.type == pygame.QUIT: # 退出事件
going=False
pygame.draw.circle(screen,(255,0,0),(200,300),r)
r += 1
pygame.display.update()
pygame.quit()
5. 刷新率
我們發(fā)現(xiàn)這個(gè)圓變得太快了,加一個(gè)延時(shí)緩一緩,例如每隔0.1s在進(jìn)行刷新文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-402434.html
r = 20
going = True
while going:
for event in pygame.event.get(): # 遍歷事件
if event.type == pygame.QUIT: # 退出事件
going=False
pygame.draw.circle(screen,(255,0,0),(200,300),r)
r += 1
pygame.display.update()
time.sleep(0.1)
pygame.quit()
pygame給我們提供了一個(gè)clock對(duì)象可以用來(lái)控制刷新的頻率文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-402434.html
clock = pygame.time.Clock() # 創(chuàng)建一個(gè)clock對(duì)象
r = 20
going = True
while going:
for event in pygame.event.get(): # 遍歷事件
if event.type == pygame.QUIT: # 退出事件
going=False
pygame.draw.circle(screen,(255,0,0),(200,300),r)
r += 1
pygame.display.update()
clock.tick(10) # 刷新頻率為10,也就是1s刷新10次,每個(gè)100ms刷新一次
pygame.quit()
到了這里,關(guān)于pygame入門教程-基礎(chǔ)篇的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!