网友真实露脸自拍10p,成人国产精品秘?久久久按摩,国产精品久久久久久无码不卡,成人免费区一区二区三区

小程序模板網

如何將單機下棋游戲改造成聯網實時對戰下棋小游戲

發布時間:2018-05-09 15:53 所屬欄目:小程序開發教程
單機的棋牌類游戲開發起來比較簡單,甚至網絡上直接有源碼下載,但是,想要改造成聯網實時對戰的下棋小游戲,就需要涉及到熟悉網絡協議棧、掌握后端知識以及面對服務器帶來的高額成本等難題。
那么,如何避免這些難題,快速的開發出聯網實時對戰的小游戲呢?
下面我將詳細闡述,如何借助第三方Bmob Game SDK 將單機下棋游戲改造成聯網實時對戰下棋小游戲的過程。
import BGS from '../../js/bmobgamesdk/bgsapi';//根據你自己的存放路徑更改
let model = BGS.instance;

model.Init('3f729baax0', 'ws://139.159.220.251:29175', function (succ, msg) {
  if (succ) {
    // 用bmob小程序sdk進行登錄注冊
    // _getUser(listener);
  } else{
    // 提醒失敗,并給重新init的按鈕
  }
});

4. 創建房間,獲得Bgs.instance.Init的第二個參數

import BGS from '../../js/bmobgamesdk/bgsapi';//根據你自己的存放路徑更改
let model = BGS.instance;

var userId =  Bmob.User.current().id;
model.CreateRoom(userId, 2, function(isOK, res) {
        console.log("res >", res);
        if (isOK) {
          var roomInfo = res.roomInfo;
          console.log('對戰開房成功', _data);
          // 創建房間成功,跳轉游戲房間頁面,別忘了把房間信息roomInfo傳遞過去
        } else {
          common.showModal('對戰開房失敗,' + res);
        }
      });
運行游戲,打開network抓包,創建一個房間,查看這個操作的返回結果,返回結果為
{
    "address": "a.b.c.d", // 服務器ip
    "roomInfo": {
        "ports": {
            "websocket": efgh // 服務器端口
        },
        "rid": xxx, // 房間id
        "joinKey": yyy // 房間密匙
    }
}
 

這樣,你就獲得了初始化sdk的第二個參數,是 ws://a.b.c.d:efgh 這樣的格式

 

 

5. 加入房間,初始化監聽器

import BGS from '../../js/bmobgamesdk/bgsapi';//根據你自己的存放路徑更改
let model = BGS.instance;

if (this.isConnected)
  return;
t('連接房間');
this.mRoomActListener = this.onRoomAction.bind(this);
this.mOfflineListener = this.onOffline.bind(this);
model.RegistRoomActListener(this.mRoomActListener);// 注冊系統通知監聽,詳細參考官網下載的demo
model.RegistOfflineListener(this.mOfflineListener);// 注冊掉線通知監聽

let emptyFun = function() {};
model.SetGameRuntimeListeners(
  emptyFun,//這三個監聽器本游戲中沒有涉及
  emptyFun,
  emptyFun,
  this.onTransfer.bind(this),// 玩家間交互信息的監聽器
  this.onCloudNotify.bind(this)//云端代碼通知的監聽器
);

// 加入房間
// 這里的roomData就是創建房間時讓你保存的roomInfo啦
model.JoinRoom(that.roomData.rid, that.roomData.joinKey, userId, model.get('seatKey'), function(isOK, data) {
  if (isOK) {
    common.toast('加入房間成功');
    console.log("房間信息:", data);
 let
      playerCount = data.playerCount,
      no = data.no,
      isPlaying = data.isPlaying,
      players = data.players,
      masterId = data.master;

    // 根據返回的房間信息做些保存或處理,這里不詳細寫出來,大家根據自己的情況靈活變通...

    if (data.seatKey)
      model.set('seatKey', data.seatKey);
    that.isConnected = true;

    return;
  }
//加入房間失敗
  if (data.indexOf("204") > -1)
    data = "房間已關閉";
  else if (data.indexOf("206") > -1)
    data = "房間已滿員";
  else if (data.indexOf("201") > -1)
    data = "未知錯誤";
  else if (data.indexOf("203") > -1)
    data = "沒有登陸";
  else if (data.indexOf("208") > -1)
    data = "游戲中";
  else if (data.indexOf("204") > -1)
    data = "房間不存在";
  else if (data.indexOf("202") > -1)
    data = "參數錯誤";

  console.log('加入房間失敗:', data);
}.bind(this));

// 收到客戶端的回調
onTransfer(no, res) {
    console.log("收到客戶端的回調:" + no, res)
    let flag = res.shift();
    switch (flag) {
      case 1: // 下棋
        t('收到客戶端的下棋數據');
        t(res);
        break;
      case 2: // 被請求悔棋
        // ...

    }
},
// 收到云端代碼服務端的回調
onCloudNotify(notify) {
   notify = JSON.parse(model.bytesToString(notify, 0, notify.length));
   console.log("收到服務器的回調:", notify);
  // ...
},
 

6. 實現下棋數據的實時交互

// 玩家之間交互數據,上面的onTransfer會收到對方發送的
// 要以byte數組形式,一般把數組的第一位作為自定義交互類型flag,后面的為要交互的數據
model.SendTransferToAllExceptSelf([1, ...]);

// sdk特別提供了把string和byte數組互轉的方法
model.stringToBytes('string'); // string轉byte[]
model.model.bytesToString(bs, 0, bs.length); // byte[]轉string

// 調用云端代碼,參數為云端代碼方法名
model.CloudAction('Ready');

7. 實現云端代碼邏輯

8. 離開房間

//生命周期函數--監聽頁面卸載
  onUnload: function() {
    if (that.battle && that.isConnected) {
      // model.SendTransferToAllExceptSelf([4]);// 向對方發送離開信息
      model.UnregistOfflineListener(this.mOfflineListener);
      model.StopGameRuntimeListener();
      this.mOfflineListener = null;
      model.QuitRoom();
    }
 }

說明:

賬號、Demo、SDK獲取方式、技術交流:

可加官方客服QQ:2967459363

微信小程序搜索<棋頭并進>,體驗此款下棋微信小游戲

 


本文地址:http://www.xiuhaier.com/wxmini/doc/course/24412.html 復制鏈接 如需定制請聯系易優客服咨詢:800182392 點擊咨詢
在線客服
易小優 ×