<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
本文將主要介紹Pygame的draw模組,主要內容翻譯自pygame的官方檔案
pygame.draw 模組用於在Surface上繪製一些簡單的圖形,比如點、直線、矩形、圓、弧等。
pygame.draw中函數的第一個引數總是一個surface,然後是顏色,再後會是一系列的座標等。稍有些計算機繪圖經驗的人就會知道,計算機裡的座標,(0,0)代表左上角。而返回值是一個Rect物件,包含了繪製的領域,這樣你就可以很方便的更新那個部分了。
先從整體來看pygame.draw有哪些函數:
大多數函數接受一個width參數列示線條(畫筆)的寬度,如果該值設定為0,則表示填充整個圖形。
所有的繪製函數都會尊重指定的Surface編輯區,而且會限制在這個區域內。函數的返回值是一個Rect,表示的是受影響的Surface區域。(原文:All the drawing functions respect the clip area for the Surface, and will be constrained to that area. The functions return a rectangle representing the bounding area of changed pixels.)
顏色引數通常是一個RGB三元組(R, G, B)。也可以接受RGBA形式的顏色值。
這些繪製函數會臨時鎖定所操作的Surface物件。
pygame.draw.rect
原型:pygame.draw.rect(Surface, color, Rect, width=0): return Rect
用途:在Surface上繪製矩形,color
引數是線條(或填充)的顏色,引數Rect的形式是((x, y), (width, height)),表示的是所繪製矩形的區域,其中第一個元組(x, y)表示的是該矩形左上角的座標,第二個元組 (width, height)表示的是矩形的寬度和高度。width表示線條的粗細,單位為畫素;預設值為0,表示填充矩形內部。
此外,Surface.fill 同樣可以用來繪製填充矩形。
pygame.draw.polygon
原型:pygame.draw.polygon(Surface, color, pointlist, width=0): return Rect
用途:polygon是多邊形,這個函數和rect類似,除了第三個引數。顧名思義,pointlist是一個座標點的列表,表示多邊形的各個頂點。
pygame.draw.circle
原型:pygame.draw.circle(Surface, color, pos, radius, width=0): return Rect
用途:用於繪製圓形。第三個引數pos是圓心的位置座標,radius指定了圓的半徑。
pygame.draw.ellipse
原型:pygame.draw.ellipse(Surface, color, Rect, width=0): return Rect
用途:ellipse是橢圓形,這個函數在矩形 Rect 內部繪製一個內接橢圓。
pygame.draw.arc
原型:pygame.draw.arc(Surface, color, Rect, start_angle, stop_angle, width=1): return Rect
用途:繪製一段圓弧,或者其實是上面提到的橢圓的一部分。與ellipse函數相比,多了兩個引數:start_angle是該段圓弧的起始角度,stop_angle是終止角度。這兩個都是用弧度制來表示的,而原點就是矩形Rect的中心。在Rect平面上建立座標系,原點是中心,簡單示意圖如下。0弧度的起點是右邊的中點處。
pygame.draw.line
原型:pygame.draw.line(Surface, color, start_pos, end_pos, width=1): return Rect
用途:繪製直線段,start_pos 和 end_pos 分別表示起始點和終止點,用座標表示。width為線條寬度,預設為1. 線條兩端自然結束,沒有明顯的端點(如實心黑點)。
pygame.draw.lines
原型:pygame.draw.lines(Surface, color, closed, pointlist, width=1): return Rect
用途:用於繪製一系列直線段。closed是一個布林變數,如果closed為真,那麼表示需要把第一點和最後一點連線起來。這些點來自pointlist,一個包含座標點的列表。這個函數不會繪製線條的端點,也沒有斜角連線(miter joints),而且角度小和線條粗的連線看起來會有點奇怪( Lines with sharp corners and wide line widths can have improper looking corners.)。
pygame.draw.aaline
原型:pygame.draw.aaline(Surface, color, startpos, endpos, blend=1): return Rect
用途:繪製一條平滑的(消除鋸齒)直線段。
pygame.draw.aalines
原型:pygame.draw.aalines(Surface, color, closed, pointlist, blend=1): return Rect
用途:繪製連續的抗鋸齒線段。該函數還有上面的aaline的用法和前兩個類似。
繪製圖形時,函數使用方法舉例。
import pygame from math import pi #初始化 pygame.init() # 設定主螢幕大小 size = (500, 450) screen = pygame.display.set_mode(size) #設定標題 pygame.display.set_caption("小小工坊") # 設定一個控制主迴圈的變數 done = False #建立時鐘物件 clock = pygame.time.Clock() while not done: # 設定遊戲的fps clock.tick(10) for event in pygame.event.get(): if event.type == pygame.QUIT: done = True # 若檢測到關閉視窗,則將done置為True # 繪製一條寬度為 3 的紅色對角線 pygame.draw.line(screen, (0, 255, 0), [0, 0], (500, 450), 3) # 繪製多條藍色的直線(連續直線,非抗鋸齒),False 表示首尾不相連 pygame.draw.lines(screen, (0, 0, 255), False, [[0, 80], [50, 90], [200, 80], [220, 30]], 1) # 繪製一個灰色的矩形區域,以灰色填充區域 pygame.draw.rect(screen, (155, 155, 155), (75, 10, 50, 20), 0) # 繪製一個線框寬度為2的矩形區域 pygame.draw.rect(screen, (0, 0, 0), [150, 10, 50, 20],2) # 繪製一個橢圓形,其線寬為2 pygame.draw.ellipse(screen, (255, 0, 0), (225, 10, 50, 20), 2) # 繪製一個實心的紅色橢圓形 pygame.draw.ellipse(screen, (255, 0, 0), (300, 10, 50, 20)) # 繪製一個綠色邊框(寬度為2)三角形 pygame.draw.polygon(screen, (100, 200, 45), [[100, 100], [0, 200], [200, 200]], 2) # 繪製一個藍色實心的圓形,其中[60,250]表示圓心的位置,40為半徑,width預設為0 pygame.draw.circle(screen, (0, 0, 255), [60, 250], 40) # 繪製一個圓弧,其中0表示弧線的開始位置,pi/2表示弧線的結束位置,2表示線寬 pygame.draw.arc(screen, (255, 10, 0), (210, 75, 150, 125), 0, pi / 2, 2) # 重新整理顯示螢幕 pygame.display.flip() # 點選關閉,退出pygame程式 pygame.quit()
繪製臉部圖形
import pygame, sys from math import pi pygame.init() screen = pygame.display.set_mode((600, 400)) pygame.display.set_caption("pygame 繪圖") GOLD = 255, 251, 0 RED = pygame.Color('red') WHITE = 255, 255, 255 GREEN = pygame.Color('green') e1rect = pygame.draw.ellipse(screen,GREEN, (50,50,500,300),3) c1rect = pygame.draw.circle(screen, GOLD, (200, 180), 30, 5) c2rect = pygame.draw.circle(screen, GOLD,(400, 180), 30, 5) r1rect = pygame.draw.rect(screen, RED, (170, 130, 60, 10), 3) r2rect = pygame.draw.rect(screen, RED, (370, 130, 60, 10)) plist = [(295,170), (285,250),(260,280),(340,280),(315,250),(305,170)] l1rect = pygame.draw.lines(screen,GOLD,True,plist,2) a1rect = pygame.draw.arc(screen,RED,(200,220,200,100), 1.4*pi, 1.9*pi, 3) while True: for e in pygame.event.get(): if e.type == pygame.QUIT: pygame.quit() sys.exit() pygame.display.update()
到此這篇關於Python使用draw類繪製圖形範例講解的文章就介紹到這了,更多相關Python draw類內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45