Python3
在Python2
的基礎之上做了非常多的改進,比如字符串編碼,在Python3
中默認字符使用的是unicode
編碼,可以涵蓋這個地球上所有的字符,當然了,優勢不僅僅只有這一點。再加上Python
這門語言本身開發效率特別高,因此今天我們教大家用Python3
來開發爆款遊戲——捕魚達人!
首先對捕魚達人這款遊戲做個簡單瞭解。捕魚達人是前幾年特別火的一款遊戲,他是一款以深海狩獵爲題材的休閒競技遊戲。2009年《捕魚達人》上線,最初以簡單輕鬆的捕魚玩法獲得了玩家的喜愛。隨後幾年,獲得了遊戲工委頒發的“遊戲十強”2015年度十大最受歡迎移動網絡遊戲獎等多項獎項。鄭重宣佈捕魚達人的地位。
Python3
中有一個遊戲開發引擎叫做cocos2d
。這款遊戲引擎最初是Objective-C
版本,只能在iOS
系統上使用,後來國內大牛王哲把他給翻譯成了一個C++
的版本,C++
具有可移植性,因此迅速火爆起來。今天我們要用到的這個cocos2d
,是Python
版本的,python
版本的cocos2d
相對於C++
的版本來講,開發效率更高,沒有那麼多野指針和內存泄漏的問題,並且同樣也支持跨平臺,開發出來的遊戲不需要更改一行代碼就可以在Windows
和Mac
以及Linux
上運行。
如果你還沒有安裝這個遊戲引擎,那麼可以通過以下命令進行安裝:
pip3 install cocos2d
如果你還沒有遊戲素材,加羣:526929231
獲取哦~~
初始化導演類:
cocos2d
中,導演類是用來安排整個遊戲的進程的。並且在遊戲過程中是一個單例對象。使用cocos2d
做的第一件事就是初始化director
:
from cocos.director import director
# 設置窗口的寬度是800像素,高度是400像素
director.init(width=800,height=480)
創建遊戲場景和層:
場景是遊戲開發中的一個組成部分,一個場景遊戲界面可以是一個場景。場景一般不會直接放遊戲元素,比如魚和炮筒。一般我們會把遊戲元素放在層中,然後再把這個層放到場景中,層也可以用來接收用戶的事件,比如點擊事件。因此我們來初始化第一個場景和層:
from cocos import layer
from cocos import scene
game_layer = layer.Layer()
game_scene = scene.Scene()
添加背景圖片:
遊戲都是在海底中玩的,因此要使用一張圖片來作爲遊戲的背景,不然遊戲就索然無味了。在cocos2d
中,如果想要加載一張圖片,則必須使用到精靈(Sprite),以後我們遊戲中將會使用的魚、炮筒、網,都是通過精靈來實現的。並且精靈要放在層中,這裏我繼承了layer.Layer
,重寫了一個子類(遊戲中用到的素材,搜羣:526929231獲取),代碼如下:
添加炮筒:
炮筒需要通過精靈來實現,這裏我就直接寫了個子類,繼承自sprite.Sprite
,然後創建了一個炮筒類,代碼如下:
接收用戶點擊事件:
要想接收用戶點擊事件,要做兩件事情。第一,設置遊戲層的類屬性is_event_handler=True
,第二,要實現on_mouse_press
來接收用戶點擊事件,代碼如下:
旋轉炮筒:
用戶點擊屏幕後要旋轉炮筒,並且撒網,這裏先來旋轉炮筒。因爲我們只知道屏幕的x
和y
座標,不知道角度,因此這裏要用到三角函數來進行一個轉換,代碼如下:
撒網:
在旋轉炮筒後,要把網撒出去,撒到鼠標點擊的地方,並且網在撒出去的時候要從小變大(網圖片素材搜裙:526929231),代碼如下:
添加魚:
到目前位置,我們的遊戲場景中還沒有一條魚,因此我們這裏添加魚的類,並且讓他繼承自sprite.Sprite
,魚在遊動的過程中,會不斷的更新自己的動作,因此不能簡單的使用一張圖片,而要使用到一組圖片,我們叫做關鍵幀動畫,如果不懂關鍵幀動畫或者需要魚的素材,搜裙:526929231。代碼如下:
魚和網的碰撞檢測:
當網撒出去後,應該判斷有沒有和魚發生碰撞,如果碰撞到了,就要讓這條魚設置爲被捕獲的狀態。在cocos2d
中,已經封裝好了碰撞檢測的模塊,通過cocos.collision_model
即可完成。並且如果要給元素添加碰撞檢測,必須添加一個cshape
屬性,這個屬性才能發生碰撞。這裏代碼有點多,我分開來列出來:
魚:
網:
檢測是否發生碰撞:
寫在最後:
以上給大家提供了一個思路,如果沒有cocos2d
開發經驗的同學,可能不是很好理解。因此我專門建了一個裙(526929231)給大家做答疑,如果大家想要遊戲素材和源代碼,以及完整教學視頻的,可以加下。最後附一張實現後的效果,祝大家學習愉快: