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

發表於2015-12-11

上次我們說明了使用鍵盤操作遊戲,鍵盤是非常古老的輸入裝置,甚至筆計算機本身都要古老的多,因為它發源於打字機,貌似1868年就有成熟的打字機問世了。不得不說的是,現在最常用的鍵位排部,並不是最科學的,相比上一次說過的DUORAK鍵盤,打字者的手指平均每日運動1英里,而QWERTY則是12到20英里。當然這對遊戲毫無意義……

相比而言,滑鼠非常的年輕,世界上最早的滑鼠誕生於1964年,它是由美國人道格·恩格爾巴特(Doug Engelbart)發明的。IEEE協會把滑鼠的發明列為計算機誕生50年來最重大的事件之一,可見其對IT歷程的重大影響作用。1983年蘋果公司給自家的電腦安上了滑鼠,使用者就開始離不開這個小東西了。而現代遊戲,離開了滑鼠,99%的都沒法玩!我們自然得好好研究如何使用滑鼠來操控我們的遊戲。

使用滑鼠控制精靈

我們已經看到如何畫一個游標了,只是簡單的在滑鼠座標上畫一個影象而已,我們可以從MOUSEMOTION或者pygame.mouse.get_pos方法來獲得座標。但我們還可以使用這個座標來控制方向,比如在3D遊戲中,可以使用滑鼠來控制視角。這種時候,我們不使用滑鼠的位置,因為滑鼠可能會跑到視窗外面,我們使用滑鼠現在與上一幀的相對偏移量。在下一個例子中,我們演示使用滑鼠的左右移動來轉動我們熟悉的小魚兒:

 

一旦開啟這個例子,滑鼠就看不到了,我們得使用Esc鍵來退出程式,除了上一次的方向鍵,當滑鼠左右移動的時候,小魚轉動,按下滑鼠左右鍵的時候,小魚前進/後退。看程式碼,基本也是一樣的,就多了幾句帶註釋的。

這裡使用了

 

來完全控制滑鼠,這樣滑鼠的游標看不見,也不會跑到pygame視窗外面去,一個副作用就是無法使用滑鼠關閉視窗了,所以你得準備一句程式碼來退出程式。

然後我們使用

 

來獲得x方向上的偏移量,除以5是把動作放慢一點……

還有

 

獲得了滑鼠按鍵的情況,如果有一個按鍵按下,那麼對應的值就會為True。

總結一下pygame.mouse的函式:

  • pygame.mouse.get_pressed —— 返回按鍵按下情況,返回的是一元組,分別為(左鍵, 中鍵, 右鍵),如按下則為True
  • pygame.mouse.get_rel —— 返回相對偏移量,(x方向, y方向)的一元組
  • pygame.mouse.get_pos —— 返回當前滑鼠位置(x, y)
  • pygame.mouse.set_pos —— 顯而易見,設定滑鼠位置
  • pygame.mouse.set_visible —— 設定滑鼠游標是否可見
  • pygame.mouse.get_focused —— 如果滑鼠在pygame視窗內有效,返回True
  • pygame.mouse.set_cursor —— 設定滑鼠的預設游標式樣,是不是感覺我們以前做的事情白費了?哦不會,我們使用的方法有著更好的效果。
  • pyGame.mouse.get_cursor —— 不再解釋。

關於使用滑鼠

在遊戲中活用滑鼠是一門學問,像在FPS中,滑鼠用來瞄準,ARPG或RTS中,滑鼠用來指定位置和目標。而在很多策略型的小遊戲中,滑鼠的威力更是被髮揮的 淋漓盡致,也許是可以放置一些道具,也許是用來操控蓄力。我們現在使用的螢幕是二維的,而滑鼠也能在2維方向到達任何的位置,所以滑鼠相對鍵盤,更適合現代的複雜操作,只有想不到沒有做不到啊。

絕大多數時候,滑鼠和鍵盤是合作使用的,比如使用鍵盤轉換視角,使用鍵盤移動,或者鍵盤對應很多快捷鍵,而鍵盤則用來指定位置。開動大腦,創造未來!

下一章節講述使用遊戲控制器,也就是手柄啦~ 手裡拿一個手柄玩遊戲,感覺就是不一樣,不過被爸媽看到立刻就知道不在幹正事了……

 

相關文章