根據(jù)微信官方對外公開的消息,微信小游戲的腳步越來越接近了。它的開發(fā)者資格門檻和使用者門檻都很低,以后必將引爆一波"全民開發(fā)小游戲"浪潮。
官方的開發(fā)工具創(chuàng)建項目即可獲取 `打飛機` 的源碼,這是一個很小但五臟俱全的2D游戲,相信大多數(shù)嗅覺靈敏的程序員小哥哥們都已經(jīng)體驗并且親手改造過啦。
但是如果你想借助微信的平臺,做一個交互性、可玩性很強的 `聯(lián)網(wǎng)游戲` ,就有一定的難度啦。,第一波流量紅利你也能輕松抓住!這次教程我們就來討論 **如何在完全不懂服務器開發(fā)的情況下做一個實時聯(lián)網(wǎng)對戰(zhàn)的微信小游戲** (聯(lián)網(wǎng)飛機大戰(zhàn))。
為了能通讀這篇文章,你最好:
下文重點都是講如何快速上手開發(fā) 聯(lián)網(wǎng)的微信小游戲 , 但 如果你懂得一些U3D開發(fā),Bmob官方 也同時提供了 Unity3D版本的Demo+SDK,兩者可以跨平臺互通一起玩,且接口規(guī)范高度一致,基本上覆蓋市面上所有的主流終端 PS:微信小游戲、Unity3D的SDK都是 開源 的,歡迎各位糾錯
最簡單的步驟
接下來大概介紹一下微信小游戲項目開發(fā)的要點,云端代碼的詳解和U3D版本的教程將陸續(xù)推出。
運行效果左邊的是 微信小游戲-開發(fā)者工具 的游戲頁面,與右邊的 Unity3D-MacOS-Editor 跨平臺玩 運行效果如下: https://www.bilibili.com/video/av21409295/ 不得不說程序員自己來做UI真的丑得可以,那個"房間"界面真的無力吐槽 目前的Demo跨平臺玩耍還有點小問題,例如玩家、怪物的移動速度不統(tǒng)一。但同平臺對戰(zhàn)是高度一致的。 這個問題與SDK沒有關(guān)系,都是Demo本地項目的參數(shù)設置,主要是因為Unity項目都用的是絕對值,微信小游戲項目都是相對值,后續(xù)Unity也采用相對值的方式,完善Demo。 如何從零開發(fā)論游戲開發(fā)的經(jīng)驗,相信各位讀者中比我厲害的人多了去了。我這里就根據(jù)我個人的開發(fā)歷程,圍繞 聯(lián)網(wǎng)飛機大戰(zhàn) 這個項目,講一下從零開發(fā)游戲的步驟吧。(嫌麻煩的可以不用看這一篇)
玩法:這個項目準備做成可以容納超多人同時在線的飛機大戰(zhàn),所有設定基本上和微信小游戲官方Demo一樣,增加了幾個設定: - 有四種造型、級別不同的Bot(有些人習慣稱為 '電腦',也可以稱為'飛機NPC') - 第3、4級的Bot可以開火,子彈(下稱Fire)飛行速度與玩家一致,4級Bot的開火頻率更高 - Bot有生命值(不再是一碰就死),分別是2、3、4、4,表示可以承受的Fire攻擊次數(shù) - Player(玩家)和Bot都分為兩個陣營,陣營內(nèi)無隊友傷害 - Player的陣營由服務器隨機劃分,也可以改成玩家自己決定 - 刷怪邏輯放在云端,指定新產(chǎn)生的Bot的陣營、位置、類型 - Player受到傷害即淘汰,F(xiàn)ire碰到任何物體都消失 - Player之間、Bot之間、Player與Bot 如果發(fā)生碰撞,會同歸于盡 - Player的開火暫時做成自動的,而不是按鍵開火 - Player的開火事件(開火坐標)是直接發(fā)送到其它客戶端,不經(jīng)過云端代碼 - Player的淘汰交由云端處理,由云端校驗后,再把該事件和勝負判定分發(fā)下去 - Bot的淘汰判定交由云端處理、分發(fā) - 當某一方Player全部死亡時,另一方勝利;雙方各剩一人時同歸于盡則平局 客戶端間屬性同步、事件通知:玩家僅有兩個屬性需要自動同步、分發(fā),一個是 位置,另一個是 分數(shù);直接同步的事件僅有 開火 - 位置:這是一個2D游戲,所以玩家位置可以用float[2]類型表達 但是為了保持一致性,Demo用了int[2],數(shù)值由0-65535,表達0%-100% (一致性,是指跨平臺或分辨率、屏幕大小不同時,坐標需要達成一致最好用百分比) - 分數(shù):僅云端代碼有權(quán)限修改,根據(jù)Player、Bot的擊落事件加分 可以在游戲結(jié)束時,結(jié)算成經(jīng)驗值,保存到Bmob數(shù)據(jù)庫 - 開火:直接通知到其它客戶端,僅記錄Fire的起點坐標即可,也就是[0-65535,0-65535] 表達成byte[]時,一個0-65535的int可以變成兩個0-255的數(shù)字組成 再加上需要標記這次通知的事件類型(開火),這里定flag為50 也就是開火時向其它玩家發(fā)送 [50, 0-255, 0-255, 0-255, 0-255]
|