将单机下棋游戏改造成联网实时对战下棋
北京阳光环球广告有限公司 http://www.sunad.net.cn 2018-05-08 浏览量:1000
Tags:
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. 实现云端代码逻辑
打开 Eclipse 或 Android Studio,创建Java项目,导入 BmobGame_JavaCloud_vx.x.x_xxxxxx.jar,并创建 Player.java 和 Room.java,分别继承自 PlayerBase.class 和 RoomBase.class 后,编写游戏逻辑代码。写好后提交到官网管理后台的云函数处。
这两个java文件的编写主要查看另一篇教程。
本文地址:http://www.sunad.net.cn/content-104-794-1.html
- SEO知识
- SEO热点问题
- SEO工具
- seo外链怎么优化?07-16
- 如何对网站进行seo07-15
- 有用的金融seo推广方案07-15
- seo文章关键词怎么布局才有效果07-12
- 那些与SEO相关的技术07-11
- 网站优化标题重要吗?该怎样写标题呢?07-11
- seo运营是什么意思?07-10
- 那些与SEO相关的技术07-05
- 标题在网站SEO优化中的作用是什么?07-05
- div+css为什么对网站优化有很大的帮助07-26
- SEO网站优化常犯的几种过度优化07-26
- 网站优化怎么快速找有用的分类目录07-23
- 如何找搜索引擎的高质量原创文章07-23
- 企业站如何做好seo优化工作07-10
- 北京优化公司/北京网站优化/百度权重优化到底起到多大作用07-04
- 怎样优化百度下拉框与相关搜索07-02
- 整站优化SEO/更新保护网站最好要合适的几个处理办法06-26
- seo整站优化/整站优化SEO/刚着手建时站内优化操作06-21
- SEO新手优化网站要注意的问题05-28
- 百度seo整站优化/百度SEO网站优化/网站快速排名的几种操作05-23
- SEO网站优化更新如何做软文营销07-26
- 怎么利用差别化来做网站SEO排名07-23
- 利于网站SEO迅速排名的六种实用性办法07-23
- 北京SE0网站优化/丰台SEO优化/快速排名点击小心网站被K07-04
- 关键词优化公司/百度SEO优化/操作新站SEO常见的几种不正确06-21
- SEO网站优化点击率对网站排名有多大帮助05-28
- 百度seo整站优化/百度SEO网站优化/div+css布局网站对搜索引擎的好处05-23
- 企业手机网站建设/SEO优化TDK怎么写才符合搜索引擎呢05-22
- 企业手机网站建设/企业手机站设计制作/企业手机网站建设如何提前做seo工作05-22
- SEO网站优化大神讲解网址怎样做网站优化05-21
- 建站知识
- 网站设计
- 网站开发
- 如何用最少的钱搭建一个自己的网站07-16
- 网站建设基本流程07-15
- 网站设计之首页图文混排技巧:07-12
- 网站建设小技巧提升网站质量07-11
- 影响网站建设费用的主要原因有哪几点07-10
- php秒杀系统架构设计实例07-26
- 网站建设浅谈php中使用websocket07-23
- 小白学习:网站建设登录功能讲解07-04
- 网站建设设计/网站设计/html锚点定位四种方法05-23
- 网站建设托管/网站维护托管/html select事件方法汇总05-22
- 网站建设:php 后期静态绑定07-26
- Python使用Srapy框架爬虫模拟登陆并抓取知乎内容07-23
- 网站设计功能怎样做一个简单实用的上传功能07-04
- 百度seo整站优化/百度SEO网站优化/怎样找高品质的文章进行伪原创05-23
- 网站建设托管/网站维护托管/CSS 尺寸(Dimension)05-22
- 北京企业网站建设费用报价/CSS分组和嵌套选择器05-21
- 北京手机网站制作:CSS分组和嵌套选择器05-18
- 企业网站建设/企业站定制建站/CSS padding(填充)05-17
- 北京手机网站制作/企业站定制设计/CSS margin(外边距)05-16
- 网站建设报价/网站建设费用/网站制作报价/CSS padding(填充)05-15
- 网站设计:PHPExcel导入excel文件07-26
- 最受欢迎的Python开源框架07-23
- 北京网页设计/验证邮件和URL的方法07-04
- 网站建设托管/网站维护托管/PHP 表单验证05-22
- 北京企业网站建设费用报价/PHP表单处理05-21
- 网站定制:PHP 表单处理05-18
- 企业网站建设/企业站定制建站/PHP 全局变量 - 超全局变量05-17
- 北京手机网站制作/企业站定制设计/PHP 数组排序05-16
- 网站定制设计/网站定制/网站设计/什么是数组?05-14
- 网站定制设计/网站设计定制/PHP 用户定义函数05-14
- 行业资讯
- 应用解决方案
- 你羡慕那些利用小程序赚钱的人吗?其实你也可以。07-26
- 移动端网站开发如何做代码适配?05-22
- 手机企业站定制建站设计/APP启动页面也是APP引导页面吗05-21
- APP小程序中UI界面设计需要注意的问题05-18
- 手机APP小程序开发/手机app制作公司/APP开发的几点启蒙05-17
- APP小程序开发中经常碰到的误区05-16
- APP怎样设计用户体验05-14
- APP小程序怎么不让客户卸载05-14
- 分析用户不同生命周期阶段的最基本的指标05-11
- 利于手机app开发人员了解应用程序的性能05-11
- 抖音海外版遭封禁,小程序服务暂停,近期抖音可谓是多灾多难07-26
- 如何在博客 论坛做外部链接?05-22
- 手机企业站定制建站设计/物业APP开发需要功能有哪些05-21
- APP小程序开发中手指触发尺寸怎么设置05-18
- APP小程序怎样写运营方案05-14
- APP小程序怎样推广05-14
- APP程序怎样更好的运营05-11
- APP开发中的搜索功能的设计05-11
- 小程序使用第三方模块Underscore.js,Immutable.js,UUID05-09
- 如何处理用户的误操作引起的多次请求05-09