Pygame 中提供了一個(gè)
draw
模塊用來繪制一些簡單的圖形狀,比如矩形、多邊形、圓形、直線、弧線等。
pygame.draw
模塊的常用方法如下表所示:
方法 | 說明 |
---|---|
pygame.draw.rect() | 繪制矩形 |
pygame.draw.polygon() | 繪制多邊形 |
pygame.draw.circle() | 根據(jù)圓心和半徑繪制圓形 |
pygame.draw.ellipse() | 繪制一個(gè)橢圓形 |
pygame.draw.arc() | 繪制弧線(揮著橢圓的一部分) |
pygame.draw.line() | 繪制線段(直線) |
pygame.draw.lines() | 繪制多條連續(xù)的線段 |
pygame.draw.aaline() | 繪制一條平滑的線段(抗鋸齒) |
pygame.draw.aalines() | 繪制多條連續(xù)的線段 |
表格中的函數(shù)使用方法大同小異,它們都可以在 Surface 對象上繪制一些簡單的形狀,返回值是一個(gè) Rect 對象,表示實(shí)際繪制圖形的矩形區(qū)域。上述繪圖函數(shù)都提供了一個(gè) color 參數(shù),我們可以通過以下三種方式來傳遞 color 參數(shù)值:
下面通對上述一些方法的參數(shù)進(jìn)行詳細(xì)說明:
繪制矩形的語法格式如下:
pygame.draw.rect(surface, color, rect, width)
參數(shù)說明如下:
注意,當(dāng) width > 0 時(shí),表示線框的寬度;而 width < 0 時(shí),此時(shí)不會繪制任何圖形。
pygame.draw.polygon(surface, color, points, width)
其中 points 一個(gè)列表參數(shù),它表示組成多邊形頂點(diǎn)的 3 或者多個(gè) (x,y) 坐標(biāo),通過元組或者列表來表示這些多邊形頂點(diǎn)。其余參數(shù)與上述函數(shù)相同。
pygame.circle(surface, color, pos, radius, width=0)
上述參數(shù)的含義如下:
pygame.draw.ellipse(surface, color, Rect, width=0)
繪制橢圓形的過程,其實(shí)就是在矩形區(qū)域內(nèi)部(Rect)繪制一個(gè)內(nèi)接橢圓形,其余參數(shù)與上述參數(shù)意思相同。
當(dāng)需要繪制圓弧的曲線時(shí),使用以下函數(shù),語法格式如下:
pygame.draw.arc(Surface, color, Rect, start_angle, stop_angle, width=1)
與 ellipse 函數(shù)相比,該函數(shù)多了兩個(gè)參數(shù):
這兩個(gè)都是用弧度制來表示的,而原點(diǎn)就是矩形 Rect 的中心位置。
Draw 模塊提供了兩類繪制直線的方法,即是否消除直線的鋸齒,并且根據(jù)實(shí)際情況,我們還可以選擇繪制一條或者多條直線。
pygame.draw.line(surface, color, start_pos, end_pos, width=1)
參數(shù)說明:
如果是繪制一條消除鋸齒的平滑線,此時(shí)則使用 blend = 1 參數(shù),如下所示:
pygame.aaline(surface, color, startpos, endpos, blend=1)
blend 參數(shù)表示通過繪制混合背景的陰影來實(shí)現(xiàn)抗鋸齒功能。
當(dāng)需要繪制多條直線的時(shí)候,我們可以使用以下方法:
pygame.lines(surface, color, closed, pointlist, width=1)
其中 pointlist 與 closed 含義如下:
如果繪制抗鋸齒直線,使用以下方法:
pygame.draw.aalines(surface, color, closed, pointlist, blend=1)
除了指定了 blend = 1 之外,其余參數(shù)含義與上述函數(shù)相同。
下面通過一組簡單的示例對上述繪圖方法進(jìn)行演示:
- import pygame
- from math import pi
- #初始化
- pygame.init()
- # 設(shè)置主屏幕大小
- size = (500, 450)
- screen = pygame.display.set_mode(size)
- #設(shè)置標(biāo)題
- pygame.display.set_caption("C語言中文網(wǎng)")
- # 設(shè)置一個(gè)控制主循環(huán)的變量
- done = False
- #創(chuàng)建時(shí)鐘對象
- 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 # 若檢測到關(guān)閉窗口,則將done置為True
- # 繪制一條寬度為 3 的紅色對角線
- 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表示弧線的開始位置,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()
程序的運(yùn)行結(jié)果如下所示:
圖1:Pygame繪圖函數(shù)用法
更多建議: