百曉生用Javascript重現的《新劍俠情緣》:
[url]http://www.script8.com/bbs/project/newsword[/url]
遊戲相關截圖以下:
遊戲開始界面:
製做人員:
打鬥:
————————————————————————————————————————
用Javascript重建星際爭霸
演示地址
[url]http://www.script8.com/works/sc/index.htm[/url]
背景介紹
對不少人來講,javaScript是一種頗爲神祕的語言,這種語言由瀏覽器解析,能夠實現很複雜的功能,但在實際中又使用甚少。在以相對定位爲基礎的網站體系中,js並非必不可少的,最先的瀏覽器並不支持js,只需使用純靜態的html,也能創建功能完備的網站。對於頁面開發人員來講,使用js的時候估計也就是用於數據合法性檢查而已。近年來,隨着ajax概念崛起,js的使用有所增長,不過除了web郵箱等少數工具型的網站以外,其做用仍然是輔助性的。
實際上,js做爲最流行的腳本語言,功能是很是強大的,筆者就曾經利用js來模擬星際爭霸。你們都知道,星際爭霸是即時戰略遊戲史上的里程碑,在玩家心目中的地位是不言而喻的,泡在各類各樣的網吧裏玩星際曾經是筆者生活的一部分。僅憑一腔熱血,我就着手用js來開發星際,這是一次堅難的歷程,充滿了挫折,也享受到了樂趣,最後可以完成,倒是開始時我也沒有奢望到的。
js星際源碼最先發佈於無憂腳本的論壇裏,獲得了不少網友的好評,讓我感動之餘,也惟有更加努力。經過此次開發,個人js開發技術有了不少提升,還認識了許多喜歡js開發的朋友,幸哉!js星際如今的存放地址是
[url]http://www.script8.com/works/sc/index.htm[/url],有興趣的朋友歡迎參與討論。 解決方案 尋徑算法是遊戲的基礎,也是運算量最大的部分。我沒有使用A*算法,由於對腳原本說開銷太大了,而是自主開發一種新算法,稱之爲交點法,特色是線性尋徑,運算量比較小,缺點是不能保證結果爲最短路徑。交點法的基本思路簡述以下: 1.從起點到終點畫直線,與障礙物相交時,總會出現對應的穿入點和穿出點。 2.從穿入點的兩個方向同時繞行障礙物,選擇先到達穿出點的路線做爲前進路線,這樣就獲得了一條比較原始的路線。 3.對路線進行優化,判斷兩點是否造成通路,刪除冗餘點,獲得最終的路徑。 尋徑時大量使用了判斷是否障礙點的運算,通常的作法是遍歷數組,分別比較才能獲得結果。我把障礙點序列變成一個長字符串,經過字符串包含關係就能夠判斷出當前點是否障礙點,這樣就減小了不少運算量。 js星際所實現的,至關因而星際爭霸的開場部分,即採礦、製造建築物和生產士兵,戰鬥部分略有涉及。在編碼以前,就須要有許多準備工做,光是圖片的製做就很是煩鎖,須要萬分的耐心才行。另外,我還用hta技術開發了一個地圖編輯器,用於生成地圖數據。 遊戲裏的控制面板比較精簡,縮略地圖和選擇信息集成到右上角的一個小面板裏,其餘部分都屬於遊戲場景。每一個移動單位有8個方向,以槍兵爲例,須要用24張圖片來表現站立和走動各類姿態。這些圖片都集成在一張大圖裏,根據走動或站立狀況,顯示其中的對應部分,好比在走動時,判斷出走動方向,一邊移動槍兵位置,一邊三張圖片輪顯,表現出走動的情形。 遊戲初始化時,載入地圖數據,根據不一樣的建築物屬性,一方面生成場景,另外一方面生成障礙物列表,用於尋路之用。默認狀況下,地圖上有幾個礦工,圈選後,點擊目標能夠自主行走,根據遊戲要求,若是點擊到的是礦石,就會在礦區和總部間來回走動,每次往返都會增長礦藏量。 至於哪種建築物能生產什麼兵,每一個兵須要多少資源,建築物的生產順序是什麼,這些相對來講都比較容易,無非是作更多的圖片處理和更多的邏輯判斷而已,限於篇幅就不詳細介紹了。 經驗分享 不用太擔憂功能的實現,由於js已經很是完善了,能夠爲所欲爲地進行各類運算,使用絕對定位的機制,能夠輕鬆建立界面,再利用時鐘模擬多線程,實時移動圖片,就能夠表現動畫了,問題主要體如今速度和性能上。由於js做爲一種腳本語言,其計算性能無疑是先天不足的,同時瀏覽器也不支持directX和openGL等硬加速,動畫能力沒法另人滿意。只有經過減輕運算量,合理分配動畫資源,才能保證遊戲的平滑運行。js星際的開發,正是到處遵循了這個原則,能簡則簡,能省則省,很是節約地使用各類資源,才最終得以實現。 千萬不要在遊戲中使用濾鏡技術,特別是動態濾鏡,濾鏡渲染時會佔用大量的cpu,在cpu佔用達到80%以上時,遊戲就會感受比較卡。這一點和flash作的同類程序有明顯區別,即便cpu佔用率接近100%,flash程序仍然能保持至關的平滑。 憑心而論,客戶端的遊戲開發,應該仍是以flash爲主。與之相比,js的好處是可與網站無縫鏈接,也不須要安裝插件。固然了,只要是好玩實用的遊戲,即便是用js開發的,也何嘗不可。