用Python和Pygame寫遊戲-從入門到精通(7)

發表於2015-12-07

我們上一個章節使用了pygame.draw中的一些函式,這個模組的作用是在螢幕上繪製各種圖形。事實上,你可以不載入任何圖片,只是要這些圖形來製作一個遊戲(經典遊戲Asteroids便是,這裡有一個HTML5寫就的例子。好像訪問不了?搜個Flash版吧,多得很)。

注:該圖與該文無任何聯絡(最近在玩神鬼寓言3,感覺還是不錯的~)

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大多如此),下次開始我們學習遊戲中的動畫製作。

相關文章