轉載請注明:http://www.cnblogs.com/thorqq/p/5645170.html
項目首頁:https://www.oschina.net/p/raiden
需求分析
既然我們做的是打飛機游戲,那需要有哪些游戲對象呢?觀察一下下面這個游戲中的圖片。首先,主角當然是飛機,有玩家飛機、兩側的僚機、敵機。飛機上裝有各式各樣的武器:普通子彈、導彈、激光等。如果只是一成不變的飛機打飛機,子彈沒有變化,飛機也沒有變化,那也太沒意思了。所以我們還增加了道具,當敵機被擊落時,會有一定的幾率爆出寶石和其他各種獎勵道具,比如武器升級、戰機暴走、修復護甲、超級必殺、量子護盾。
我們來總結一下:
- 飛機有哪些基本功能? 飛行、射擊、爆炸;
- 飛機有哪些基本屬性呢? 生命、攻擊、碰撞體、外觀;
- 飛機有哪些種類呢?
- 玩家飛機:具有特殊的控制方式、具體左飛、右飛、暴走變形等特殊的外觀;
- 僚機:玩家飛機的附屬,生命:無敵,與玩家飛機共存亡;
- 必殺僚機:無敵,飛行動作固定:從下方飛出來,射擊n秒,往下飛走;
- 敵機:從屏幕的某處自動飛出,不射擊或者自動射擊;
- 高級敵機:從屏幕的某處自動飛出,飛到固定位置后,變形,然后射擊;
- boss:初始動作與高級敵機一樣,不過boss支持多次變形,當血量少於某幾個固定的值后,會觸發boss的變形,每變形一次,攻擊力增強。當boss擊落后,會產生巨大的爆炸。
- 武器有哪些基本功能? 射擊、爆炸;
- 武器有哪些基本屬性呢? 攻擊、碰撞體、外觀;
- 武器有哪些種類呢?
- 散彈:各類平行、開花子彈;
- 自定義子彈:以后詳述;
- 跟蹤導彈:始終會跟蹤最近的敵機飛行,直至擊落敵機;
- 激光:矩形形狀,傷害值按接觸的時間計算;
- 道具有哪些基本功能? 飛行;
- 道具有哪些基本屬性? 道具類型、不同的道具對飛機產生不同的作用;
- 道具有哪些種類呢?
- 寶石:相當於錢,可以用來解鎖、購買其他裝備
- 武器升級:使玩家飛機的武器提高一個等級;
- 戰機暴走:使玩家飛機的武器提高到最高等級;
- 修復護甲:恢復玩家飛機一定的生命值;
- 超級必殺:從屏幕底部飛出一個巨大的僚機,發出超級激光,秒殺屏幕中的所有敵機(如下圖);
- 量子護盾:給玩家飛機增加一個護盾,該護盾能抵擋一次子彈的攻擊,同時,護盾被擊中時能釋放出特殊的能量,能將屏幕中所有的子彈都轉化為寶石;
“超級必殺”的清屏效果是不是感覺很爽!!
右下角金黃色飛機的外圍是不是有一圈半透明的藍色圓環?這就是量子護盾。
類設計
好了,需求分析的差不多了,我們現在來抽象一下這些游戲對象,如下圖:
- 首先,我們對所有的游戲對象進行分析,總結出GameObject這個派生自Sprite的類,其中包含了幾個常用的方法:pause()/resume()/getBody()/setBody(),
- pause()/resume():使游戲對象暫停、繼續運動。這兩個函數與Node中的pause()/resume()不同,這兩個函數在使游戲對象本身暫停/恢復的同時,會使所有的子節點都調用一遍pause()和resume();
- getBody()/setBody():為簡單起見,我們沒有使用物理引擎,而是我們定義碰撞體。每一個游戲對象都有一個碰撞體,當不同游戲對象的碰撞體發生碰撞時,會產生不同的效果,例如爆炸、產生獎勵等等。這里的body是一個簡單矩形,我們自己定義矩形的大小和相對於Sprite的位置。
- 接着,飛機(Aircraft)、武器(BulletGroup/Bullet)、道具(Reward)都繼承自GameObject。
這里需要重點關注一下BulletGroup和Bullet。我們可以把BulletGroup理解成包含彈匣的一把槍,把Bullet理解成單顆子彈。槍(BulletGroup)內包含了n發子彈(Bullet)。槍(BulletGroup)的不同,決定了子彈(Bullet)的外觀、子彈的初始位置和飛行軌跡不同、子彈發射的頻率和同時射出的數量不同。 所以,我們在BulletGroup中放了vector<Bullet>這個成員變量,這是一個簡化的“子彈池”,當需要發射子彈時,從池中獲取子彈,當子彈爆炸或者飛出屏幕時,子彈需要回收,放回池中。
轉載請注明:http://www.cnblogs.com/thorqq/p/5645170.html
下一篇,我們將結合代碼講述各種游戲對象。