前言javascript
有了上文的初步需求分析後,就能夠進入初步設計階段了。html
獲得初步的領域模型,對層和模塊進行初步的劃分。html5
技術選擇java
首先,要肯定選擇什麼技術來開發遊戲。web
我之前開發過網站,也開發過javascript遊戲,所以我決定使用web技術開發。算法
而後就是決定是採用傳統的Html4,仍是最新的Html5。架構
最終我決定使用Html5技術,由於使用Html5有以下的好處:框架
開發環境dom
由於在我之前的項目中,我主要使用Asp.net技術,所以開發工具我天然而然就會選用Vs2012,雖然該IDE對於前臺開發顯得重型了一點。。。。。。你們也能夠選用Eclispe、Dreamweaver、Sublime、Webstorm等做爲開發工具。函數
外部依賴
在遊戲開發中,我使用如下的庫:
代碼結構
開發方法
考慮到如下緣由:
因此不可以採用傳統的瀑布模型開發,而應該採用迭代開發的方法。這裏個人具體開發流程爲:
初步領域模型
分析開源的RPG遊戲代碼:
看網上的學習資料:
遊戲中具備獨立外觀和屬性的個體。如主角、NPC、寶箱、子彈等。
在遊戲的世界裏,咱們能夠看到各類地圖,各類遊戲人物,看到人物在地圖上行走,對話等,不管是地圖仍是人物,其實都是圖片的處理與顯示,把不一樣的圖片顯示到屏幕上,咱們就看到不一樣的遊戲界面,要想讓這些圖片同時顯示到界面上,咱們就須要處理好層次,讓他們來分層顯示,咱們能夠想象,若是遊戲人物顯示在地圖的下層的話,顯然會被地圖遮擋住。
一個遊戲中可能包含許多內容,好比主角、玩家、NPC、怪獸、道具、效果、地圖和其它場景,咱們不必把它們堆到一塊兒,這樣你沒法進行管理和維護,所以我將它們放到多個層級,就能夠方便地對每一個層級內的元素進行統一控制。如一款RPG遊戲,我簡單把它分爲地圖層,人物層,效果層(一些法術效果等),對話層,控制層(按鈕菜單等)。
咱們只要依次將圖片畫在屏幕上,遊戲人物將站在地圖上,若是有對話,對話將出如今人物和地圖的上面,而按鈕等控件會出如今遊戲的最外層。
這裏的分層不只僅是在邏輯上將不一樣類型的元素分離開,不一樣的Layer對象還能夠配置到不一樣的Canvas畫布上,這是提高性能的一種重要的方式。
一組圖片(或一個圖的不一樣位置)在同一位置以必定的時間間隔顯示,就造成了動畫。一張圖片就是一個幀。
用於檢測炸彈人與磚牆、炸彈人與怪物等之間的碰撞。碰撞檢測包括矩形碰撞、多邊形碰撞等,通常使用矩形碰撞便可。
地圖由一個個方格組成,一個方格不是對應到一個屏幕像素(1px),而是特定範圍內的一整片像素(如一個方格大小爲5px*5px)。
角色在這種磚塊環境中的移動路線會呈現鋸齒狀。爲了儘可能讓鋸齒狀現象不那麼明顯,同時也爲了不跳格現象,遊戲角色每次都只能移動到鄰近方塊,即一次移動一個方格。
多張地圖圖片在用一個方格顯示,造成動畫。
每個遊戲都是由得到用戶輸入,更新遊戲狀態,處理AI,播放音樂和音效,還有畫面顯示這些行爲組成。遊戲主循環就是用來處理這個行爲序列,在javascript中能夠用setInterval方法來輪詢。
每秒所運行的幀數。如遊戲主循環每33.3(1000/30)ms輪詢一次,則遊戲的幀數FPS爲30.
Actor 是一個接口,他的做用是統一類的行爲(讀者能夠閱讀一下Facede模式相關文章)。咱們用一個比喻來講明:演員們有了各自的劇本,導演對全部演員說:作 下一個動做!演員們就會各自行動。而不用導演分別告訴每一個人,你要這樣作,他要那樣作。具體到程序中,幀動畫、動態圖塊兩種操做會調用徹底不一樣的函數,這 樣不利於在遊戲循環中作出一致的處理。因此咱們讓他們都實現Actor接口,只要調用接口定義的函數,他們就會作出各自的動做。
由於需求中有怪物追蹤炸彈人的功能,所以須要使用尋路算法,怪物能夠根據算法尋找到從當前方格到炸彈人方格的路徑。
如今能夠根據已有的知識,創建初步的領域模型。
根據精靈的概念,我識別出Sprite類。一個Sprite類就表明遊戲中一種獨立的個體,包含了該個體相關的屬性和方法。在遊戲中,炸彈人就是一個Sprite類,敵人也是一個Sprite類。
而後,根據分層的概念,我能夠識別出Layer類。Layer是集合類,Sprite能夠做爲其元素,Layer統一來控制Sprite的顯示。
根據遊戲主循環的概念,識別出Main類,做爲遊戲入口,負責控制遊戲的主循環,調用相關的操做。
功能需求中有地圖設置功能,所以須要一個MapData類來存儲地圖數據,須要一個ShowMap類負責顯示地圖。
功能需求中有圖片預加載功能,所以須要一個PreLoadImg類負責圖片預加載。
功能需求中有怪物追蹤炸彈人的功能,所以須要有一個算法類Algorithm,負責尋找路徑。
高層劃分
進行初步的劃分,在後面的開發中會不斷地重構。
按照經典的三層劃分,應該分出表現層、業務邏輯層、數據操做層,但考慮到目前數據的操做過於簡單,因此這裏先去掉數據操做層。在系列第3篇博文中,我會根據實際狀況再增長數據操做層。
根據領域模型的分析,地圖數據是以類的形式保存到內存中的,所以增長一個數據層,將存放數據的數據類放到該層中。
增長輔助操做層,把工具類、通用的操做放到該層中。
所以,層就分爲表現層、業務邏輯層、數據層、輔助操做層。
因爲遊戲規模過小,不須要切分系統。
進行初步的模塊劃分,根據輸入項獲得劃分的包。
功能樹、領域模型
入口包
算法包
顯示精靈包
顯示地圖包
地圖數據包
控件包
將領域模型劃分到對應的包中,根據領域模型之間的關聯,肯定層之間的關聯方向:
本文參考資料
《領域驅動設計》
《敏捷軟件開發:原則、模式與實踐》
徹底分享,共同進步——我開發的第一款HTML5遊戲《驢子跳》
HTML5研究小組第二期技術講座《手把手製做HTML5遊戲》