我們上一個章節使用了pygame.draw中的一些函式,這個模組的作用是在螢幕上繪製各種圖形。事實上,你可以不載入任何圖片,只是要這些圖形來製作一個遊戲(經典遊戲Asteroids便是,這裡有一個HTML5寫就的例子。好像訪問不了?搜個Flash版吧,多得很)。
pygame.draw中函式的第一個引數總是一個surface,然後是顏色,再後會是一系列的座標等。稍有些計算機繪圖經驗的人就會知道,計算機裡的座標,(0,0)代表左上角。而返回值是一個Rect物件,包含了繪製的領域,這樣你就可以很方便的更新那個部分了。
函式 | 作用 |
---|---|
rect | 繪製矩形 |
polygon | 繪製多邊形(三個及三個以上的邊) |
circle | 繪製圓 |
ellipse | 繪製橢圓 |
arc | 繪製圓弧 |
line | 繪製線 |
lines | 繪製一系列的線 |
aaline | 繪製一根平滑的線 |
aalines | 繪製一系列平滑的線 |
我們下面一個一個詳細說明。
pygame.draw.rect
用法:pygame.draw.rect(Surface, color, Rect, width=0)
pygame.draw.rect在surface上畫一個矩形,除了surface和color,rect接受一個矩形的座標和線寬引數,如果線寬是0或省略,則填充。我們有一個另外的方法來畫矩形——fill方法,如果你還記得的話。事實上fill可能還會快一點點,因為fill由顯示卡來完成。
pygame.draw.polygon
用法:pygame.draw.polygon(Surface, color, pointlist, width=0)
polygon就是多邊形,用法類似rect,第一、第二、第四的引數都是相同的,只不過polygon會接受一系列座標的列表,代表了各個頂點。
pygame.draw.circle
用法:pygame.draw.circle(Surface, color, pos, radius, width=0)
很簡單,畫一個圓。與其他不同的是,它接收一個圓心座標和半徑引數。
pygame.draw.ellipse
用法:pygame.draw.ellipse(Surface, color, Rect, width=0)
你可以把一個ellipse想象成一個被壓扁的圓,事實上,它是可以被一個矩形裝起來的。pygame.draw.ellipse的第三個引數就是這個橢圓的外接矩形。
pygame.draw.arc
用法:pygame.draw.arc(Surface, color, Rect, start_angle, stop_angle, width=1)
arc是橢圓的一部分,所以它的引數也就比橢圓多一點。但它是不封閉的,因此沒有fill方法。start_angle和stop_angle為開始和結束的角度。
pygame.draw.line
用法:pygame.draw.line(Surface, color, start_pos, end_pos, width=1)
我相信所有的人都能看明白。
pygame.draw.lines
用法:pygame.draw.lines(Surface, color, closed, pointlist, width=1)
closed是一個布林變數,指明是否需要多畫一條線來使這些線條閉合(感覺就和polygone一樣了),pointlist是一個點的陣列。
上面的表中我們還有aaline和aalines,玩遊戲的都知道開出“抗鋸齒(antialiasing)”效果會讓畫面更好看一些,模型的邊就不會是鋸齒形的了,這兩個方法就是在畫線的時候做這事情的,引數和上面一樣,省略。
我們用一個混雜的例子來演示一下上面的各個方法:
執行這個程式,在上面點滑鼠就會有圖形出來了;按任意鍵可以重新開始。另外這個程式只是各個命令的堆砌,並不見得是一個好的程式程式碼。
到這次為止,文字、顏色、影像、圖形都講好了,靜態顯示的部分都差不多了。然而多彩的遊戲中只有靜態的東西實在太讓人寒心了(GalGame大多如此),下次開始我們學習遊戲中的動畫製作。