午夜91福利视频,午夜成人在线观看,午夜在线视频免费观看,午夜福利短视频,精品午夜成人免费视频APP

小程序模板網

如何在完全不懂服務器開發的情況下做一個實時聯網對戰的微信小游戲 ...

發布時間(jian):2018-05-08 14:22 所屬欄目:小程序開發教程
根據微信官方對外公開的消息,微信小游戲的腳步越來越接近了。它的開發者資格門檻和使用者門檻都很低,以后必將引爆一波"全民開發小游戲"浪潮。
 
官方的開發工具創建項目即可獲取 `打飛機` 的源碼,這是一個很小但五臟俱全的2D游戲,相信大多數嗅覺靈敏的程序員小哥哥們都已經體驗并且親手改造過啦。
 
但是如果你想借助微信的平臺,做一個交互性、可玩性很強的 `聯網游戲` ,就有一定的難度啦。,第一波流量紅利你也能輕松抓住!這次教程我們就來討論 **如何在完全不懂服務器開發的情況下做一個實時聯網對戰的微信小游戲** (聯網飛機大戰)。

為了能通(tong)讀這篇文章,你最好:

  1. 已經掌握開發簡單的微信小游戲,能看懂官方 打飛機 源碼就行,甚至會用 Javascript 輸出HelloWorld也行
  2. 略懂Java,其實不懂也行,在JS的基礎上很容易引申,主要是要有 面向對象 的思想

下文重點都是(shi)講如何快速上(shang)手開(kai)發 聯(lian)網(wang)的(de)微信小游戲 , 但 如果你(ni)懂(dong)得一(yi)些(xie)U3D開(kai)發,Bmob官方(fang) 也同時提供了 Unity3D版(ban)本的(de)Demo+SDK,兩者(zhe)可以跨(kua)平(ping)臺互通一(yi)起玩,且接口規范高度一(yi)致,基本上(shang)覆(fu)蓋市(shi)面上(shang)所有的(de)主流終端(duan)

PS:微信小游戲、Unity3D的(de)SDK都(dou)是 開源 的(de),歡迎各位糾錯

最簡單的步驟

  1. 獲取 比目游戲云服務 (下稱 官網)的賬號,文章下方有獲得方式;
  2. 在官網下載 微信小游戲Demo+SDK,導入到微信開發者工具(下稱 工具),并修改AppKey;
  3. 在官網配置玩家同步屬性,并發布下載的云端代碼,然后在官網選擇一個云服務器開啟(PS:云服務器是免費的);
  4. 試運行Demo,如果console沒有報錯的話,點擊工具的預覽,用微信掃描二維碼;
  5. 現在,就可以在游戲內創建房間,體驗電腦與手機聯網對戰啦;
接下來大概介紹一下微信小游戲項目開發的要點,云端代碼的詳解和U3D版本的教程將陸續推出。
 

運行效果

  左(zuo)邊的是 微信小游戲-開發者工具 的游戲頁面(mian),與右邊的 Unity3D-MacOS-Editor 跨平臺玩

運行效(xiao)果如下:

//www.bilibili.com/video/av21409295/

不得不說(shuo)程(cheng)序員自己(ji)來做(zuo)UI真(zhen)的丑(chou)得可(ke)以,那個"房間"界面真(zhen)的無力吐(tu)槽(cao)

目前的(de)Demo跨(kua)平臺玩耍還有點(dian)小問(wen)題(ti),例如玩家(jia)、怪物(wu)的(de)移動速度不統一。但(dan)同平臺對戰是高度一致的(de)。 這個(ge)問(wen)題(ti)與SDK沒有關(guan)系,都是Demo本地項(xiang)目的(de)參數設(she)置,主要是因為(wei)Unity項(xiang)目都用(yong)(yong)的(de)是絕(jue)對值,微信小游戲項(xiang)目都是相對值,后續Unity也采用(yong)(yong)相對值的(de)方(fang)式(shi),完善(shan)Demo。

如何從零開發

論游戲開(kai)發的(de)經驗,相信各位讀者中比我(wo)厲(li)害的(de)人(ren)多了去了。我(wo)這里就根據我(wo)個人(ren)的(de)開(kai)發歷程,圍繞 聯網飛機大戰 這個項目(mu),講(jiang)一下(xia)從零開(kai)發游戲的(de)步驟(zou)吧。(嫌麻煩的(de)可以(yi)不用看這一篇)

  1. 確定游戲主題、玩法;
  2. 理清多個客戶端之間需要 同步的屬性、互相通知的事件;
  3. 分析客戶端與服務器需要 交互的事件;
  4. 制作/收集圖片、動畫、音效素材;
  5. 開發/照搬游戲世界的物理引擎,包括物體渲染、移動、碰撞檢測(以及內存管理)等;
  6. 先開發服務端游戲邏輯(Java云端代碼),有利于理清整個游戲的邏輯;
  7. 后開發客戶端游戲邏輯、接入SDK;
  8. 測試、發布;

 

玩(wan)法:這個項(xiang)目準(zhun)備做(zuo)成可(ke)以容(rong)納超多人同(tong)時在線的飛機大戰,所有設(she)定(ding)基本上和(he)微信小游戲官方Demo一(yi)樣(yang),增加了幾(ji)個設(she)定(ding):


- 有四種造型、級別不同的Bot(有些人習慣稱為 '電腦',也可以稱為'飛機NPC')
- 第3、4級的Bot可以開火,子彈(下稱Fire)飛行速度與玩家一致,4級Bot的開火頻率更高
- Bot有生命值(不再是一碰就死),分別是2、3、4、4,表示可以承受的Fire攻擊次數
- Player(玩家)和Bot都分為兩個陣營,陣營內無隊友傷害
- Player的陣營由服務器隨機劃分,也可以改成玩家自己決定
- 刷怪邏輯放在云端,指定新產生的Bot的陣營、位置、類型
- Player受到傷害即淘汰,Fire碰到任何物體都消失
- Player之間、Bot之間、Player與Bot 如果發生碰撞,會同歸于盡
- Player的開火暫時做成自動的,而不是按鍵開火
- Player的開火事件(開火坐標)是直接發送到其它客戶端,不經過云端代碼
- Player的淘汰交由云端處理,由云端校驗后,再把該事件和勝負判定分發下去
- Bot的淘汰判定交由云端處理、分發
- 當某一方Player全部死亡時,另一方勝利;雙方各剩一人時同歸于盡則平局

客(ke)戶端間(jian)屬性(xing)同步(bu)、事(shi)件(jian)通知(zhi):玩家僅有(you)兩個(ge)屬性(xing)需要自動同步(bu)、分(fen)發,一(yi)個(ge)是(shi) 位置,另一(yi)個(ge)是(shi) 分(fen)數;直接同步(bu)的事(shi)件(jian)僅有(you) 開(kai)火(huo)


- 位置:這是一個2D游戲,所以玩家位置可以用float[2]類型表達
       但是為了保持一致性,Demo用了int[2],數值由0-65535,表達0%-100%
       (一致性,是指跨平臺或分辨率、屏幕大小不同時,坐標需要達成一致最好用百分比)
- 分數:僅云端代碼有權限修改,根據Player、Bot的擊落事件加分
       可以在游戲結束時,結算成經驗值,保存到Bmob數據庫

- 開火:直接通知到其它客戶端,僅記錄Fire的起點坐標即可,也就是[0-65535,0-65535]
        表達成byte[]時,一個0-65535的int可以變成兩個0-255的數字組成
        再加上需要標記這次通知的事件類型(開火),這里定flag為50
        也就是開火時向其它玩家發送 [50, 0-255, 0-255, 0-255, 0-255]

  •  客戶端-云端交互事(shi)件(jian):需要服務器做的(de)事(shi)情有:保存房間信(xin)息;分配隊伍(wu);正(zheng)式(shi)通知游戲開始;刷怪邏輯;判定Bot淘汰;判定Player淘汰;添加Player分數;判定勝(sheng)負結果;戰績(ji)記(ji)錄

    
    - 房間、戰績信息:通過云端代碼的Bmob數據庫操作API完成
    - 分配隊伍:在客戶端Scene.OnLoad后通知服務器,服務器進行隊伍分配
              將玩家隨機、均勻分成兩隊,然后下發,客戶端處理完畢再通知服務器
    - 正式開始:服務器確認所有客戶端處理了隊伍信息后,通知所有客戶端開始游戲
    - 刷怪邏輯:隨機Bot的陣營、x軸位置、類型、名字,下發給客戶端處理
    - Bot淘汰:任意客戶端上報'目睹'某Bot被擊毀,云端即采信、下發、記分
              所謂'目睹',就是客戶端渲染時進行碰撞檢測,發現這個Bot的hp為0
    - Player淘汰:n個客戶端'目睹'某Player被擊毀,在短時間內n>=m,云端才采信、下發、記分
                 當玩家僅有2、3人時,m為1,也就是上報即采信
                 當玩家有4、5、6人時,m為2,不采信單個上報
                 當玩家超過6人時,m為3,也就是起碼3人上報才采信
                 '短時間'目前是設為2000ms,也就是上報信息的有效期為2秒
    - 判定勝負結果:兩隊最后一人同時淘汰時平局;某隊先于敵隊全員淘汰則敗
  • 
    素材:來自美工/Unity Assets商店
  • 
    物理引擎:來自微信官方Demo(Sprite.js)/腦洞+造輪子/第三方途徑下載
  • 
    
    
    // 小改進后的矩形碰撞檢測:
    isCollideWith(sp) {
        if (this.visible && sp.visible) {
            let dis = sp.x - this.x;
            if (-sp.width < dis && dis < this.width) {
                dis = sp.y - this.y;
                if (-sp.height < dis && dis < this.height)
                    return true;
            }
        }
        return false;
    }
  • 
    
    • Java云端代碼:在上面第3點已經有說明,這里放幾段代碼:
    • 測試(shi)、發布:灰常(chang)好玩,下(xia)階段準(zhun)備做(zuo)成四個陣營的玩法

    • 開發體驗

       在基本素材、組件(物理引擎)等預備(bei)充(chong)分的(de)(de)情況下,花了不到兩(liang)個小時就將一個單機游戲改造成(cheng)了聯網(wang)對戰的(de)(de)游戲,而(er)且(qie)邏輯也足夠健壯,效果還(huan)是很酷的(de)(de)。再加(jia)上SDK是開(kai)源的(de)(de),有(you)什么問題很容易定位(wei)。

      總體來(lai)講,Bmob Game SDK真正拉(la)低了網絡游戲開發的門檻,完全(quan)沒有了以前龐(pang)大、繁(fan)雜的后(hou)端開發和(he)服(fu)務(wu)器運維工作,讓很多(duo)受限于資(zi)源、只能(neng)開發單(dan)機游戲的團(tuan)隊(dui)和(he)項目有了新的出路~



易優小程序(企業版)+靈活(huo)api+前后(hou)代碼開源 碼云倉庫:
本文地址://www.jinyoudianli.com/wxmini/doc/course/24344.html 復制鏈接 如需定制請聯系(xi)易優客服咨(zi)詢:

工作日 8:30-12:00 14:30-18:00
周六及(ji)部分節假日提供值班服務

易小優
轉人工 ×