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

發表於2015-12-03

OK,到該講顯示的時候了。沒人可以否定好的畫面是一款遊戲吸引人最直接最誘人的因素,雖說濫畫面高遊戲度的作品也有,但優秀的畫面無疑是一張過硬的通行證,可以讓你爭取到更多的機會。

其實上兩回也已經開啟過顯示了,不過沒有特別說明而已,pygame.display.set_mode(xxx)就是建立一個遊戲視窗,也就是顯示的意思。

全屏顯示

我們在第一個程式裡使用瞭如下的語句

也講述了各個引數的意思,當我們把第二個引數設定為FULLSCREEN時,就能得到一個全屏視窗了

注意:如果你的程式有什麼問題,很可能進入了全屏模式就不太容易退出來了,所以最好先用視窗模式除錯好,再改為全屏模式。

在全屏模式下,顯示卡可能就切換了一種模式,你可以用如下程式碼獲得您的機器支援的顯示模式:

看一下一個例項:

 

執行這個程式,預設還是視窗的,按“f ”,顯示模式會在視窗和全屏之間切換。程式也沒有什麼難度,應該都能看明白。

可變尺寸的顯示

雖然一般的程式視窗都能拖邊框來改變大小,pygame的預設顯示視窗是不行的,而事實上,很多遊戲確實也不能改變顯示視窗的大小,我們可以使用一個引數來改變這個預設行為。

 

當你更改大小的時候,後端控制檯會顯示出新的尺寸,這裡我們學習到一個新的事件VIDEORESIZE,它包含如下內容:

  • size  —  一個二維元組,值為更改後的視窗尺寸,size[0]為寬,size[1]為高
  • w  —  寬
  • h  —  一目瞭然,高;之所以多出這兩個,無非是為了方便

注意:在我的Windows 7 64bit上執行的時候,一改變視窗大小就非法退出;在Linux機器上很正常,應該是系統的相容性問題(Pygame還只支援32位),不過想來平時都不會更改遊戲視窗大小,問題不大。

至於無邊框的視窗等,看一看本教程的第一篇就能知道了,不再贅述。

其他、複合模式

我們還有一些其他的顯示模式,但未必所有的作業系統都支援(放心windows、各種比較流行的Linux發行版都是沒問題的),一般來說視窗就用0全屏就用FULLSCREEN,這兩個總是OK的。

如果你想建立一個硬體顯示(surface會存放在視訊記憶體裡,從而有著更高的速度),你必須和全屏一起使用:

 

當然你完全可以把雙緩衝(更快)DOUBLEBUF也加上,這就是一個很棒的遊戲顯示了,不過記得你要使用pygame.display.flip()來重新整理顯示。pygame.display.update()是將資料畫到前面顯示,而這個是交替顯示的意思。

稍微說一下雙緩衝的意思,可以做一個比喻:我的任務就是出黑板報,如果只有一塊黑板,那我得不停的寫,全部寫完了稍微Show一下就要擦掉重寫,這樣一來別人看的基本都是我在寫黑板報的過程,看到的都是不完整的黑板報;如果我有兩塊黑板,那麼可以掛一塊給別人看,我自己在底下寫另一塊,寫好了把原來的換下來換上新的,這樣一來別人基本總是看到完整的內容了。雙緩衝就是這樣維護兩個顯示區域,快速的往螢幕上換內容,而不是每次都慢慢地重畫。

還有OPENGL模式,這是一個得到廣泛應用的3D加速顯示模式。不過一旦使用了這個模式,pygame中的2D影象函式就不能用了,我們會在以後講詳細的內容。

這次的東西不是很多,基本就是講了一個顯示引數,如果基礎比較好,一看就明白了。不過還是建議實際的輸入寫一下鞏固認識。下一回講字型模組(遊戲沒圖可以,沒字咋整?)~盡請期待

相關文章