本次,Matchvs为大家带来的是一款回合制休闲游戏的开源案例 。玩家双方在一个4X4的棋盘上,遵循食物链的规则玩法下进行翻牌与追逐,最终以场上存活的一方为获胜者。

体验地址:http://demo.matchvs.com/AnimalChecker-mobile

源码地址::https://github.com/matchvs/AnimalChecker

首先你需要下载Cocos Creator 和Matchvs JavaScript SDK。本次游戏设计的实现步骤主要拆分为用户登录、随机匹配和创建房间、以及同屏游戏三个部分完成。

用户登录

​ 使用Cocos Creator(以下简称CC)创建游戏登录场景

​ 使用CC 拖动控件, 还原设计稿 , 依托CC的良好的工作流,使得这部分的工作可以由游戏策划或者UI设计者来完成,程序开发者只需要在场景中挂载相应的游戏逻辑脚本. 举个例子,在登录按钮挂在一个uiLogin.js的脚本完成用户登录功能.

uilogin.fire

新建一个uiLogin.js,按 1,2,3 三个步骤挂载到场景中.

  1. 新建js脚本文件

  2. 选中场景任一控件

  3. 添加组件,选中刚新建的脚本,

在脚本的on'Load函数中给按钮添加点击监听,触发登录操作

onLoad() {this.nodeDict["start"].on("click", Game.GameManager.matchVsInit, Game.GameManager);
}

实现this.startGame函数. 登录之前需要初始化Matchvs SDK:

uiLogin.js

uiLogin.js
---var uiPanel = require("uiPanel");
cc.Class({extends: uiPanel,properties: {},onLoad() {this._super();},start() {if (window.wx) {this.nodeDict["start"].active = false;wx.getSystemInfo({success: function(data) {Game.GameManager.getUserInfoBtn = wx.createUserInfoButton({type: 'text',text: '开始多人游戏',style: {left: data.screenWidth * 0.2,top: data.screenHeight * 0.73,width: data.screenWidth * 0.65,height: data.screenHeight * 0.07,lineHeight: data.screenHeight * 0.07,backgroundColor: '#fe714a',color: '#ffffff',textAlign: 'center',fontSize: data.screenHeight * 0.025,borderRadius: 8}});Game.GameManager.getUserInfoBtn.onTap(function(res) {if (Game.GameManager.isClickCd) {return;}Game.GameManager.isClickCd = true;setTimeout(function() {Game.GameManager.isClickCd = false;}, 1000);Game.GameManager.nickName = res.userInfo.nickName;Game.GameManager.avatarUrl = res.userInfo.avatarUrl;Game.GameManager.matchVsInit();Game.GameManager.getUserInfoBtn.hide();});}});} else {this.nodeDict["start"].on("click", Game.GameManager.matchVsInit, Game.GameManager);}},onEnable() {if (Game.GameManager.getUserInfoBtn) {Game.GameManager.getUserInfoBtn.show();}},onDisable() {if (Game.GameManager.getUserInfoBtn) {Game.GameManager.getUserInfoBtn.hide();}}
});

初始化需要的几个参数在Matchvs官网注册即可得到.

 //Glb.js//--------channel: 'MatchVS',platform: 'alpha',gameId: 201554,gameVersion: 1,appKey: 'd4e29d00bd3a48e2acf4f6e7a5ffe270',secret: 'f0f7bd601d9f43db840091ac08a17002',

开始游戏,跳转场景uiGamePanel:

 startGame: function() {console.log('-----startGame-----')if(this.isLoadGame) return;this.isLoadGame = true;this.readyCnt = 0;cc.director.loadScene('game', function() {clientEvent.dispatch(clientEvent.eventType.clearChess);uiFunc.openUI("uiGamePanel", function(panel) {panel.getComponent("uiGamePanel").timeLabelInit();this.sendReadyMsg();}.bind(this));}.bind(this));},

随机匹配和创建房间

使用CC创建大厅场景(uiLobbyPanel.fire)给用户选择匹配方式,创建匹配场景(uiMatching1v1.fire) 给用户反馈比配进度,与登录功能的实现步骤类似:写一个 uiMatching1v1.js脚本挂在到场景中的控件上.

uiMatching1v1.js
----randomRoom: function() {Game.GameManager.blockInput();GLB.matchType = GLB.RANDOM_MATCH; // 修改匹配方式为随机匹配console.log('开始随机匹配');if (GLB.gameType === GLB.COOPERATION) {if (GLB.MAX_PLAYER_COUNT > 1) {if (cc.Canvas.instance.designResolution.height > cc.Canvas.instance.designResolution.width) {uiFunc.openUI("uiMatchingVer", function(obj) {var matching = obj.getComponent("uiMatching");matching.joinRandomRoom();});} else {uiFunc.openUI("uiMatching", function(obj) {var matching = obj.getComponent("uiMatching");matching.joinRandomRoom();});}} else {cc.director.loadScene('game');}} else if (GLB.gameType === GLB.COMPETITION) {if (GLB.MAX_PLAYER_COUNT === 2) {if (cc.Canvas.instance.designResolution.height > cc.Canvas.instance.designResolution.width) {uiFunc.openUI("uiMatching1v1Ver", function(obj) {var matching = obj.getComponent("uiMatching1v1Ver");matching.joinRandomRoom();});} else {uiFunc.openUI("uiMatching1v1", function(obj) {var matching = obj.getComponent("uiMatching1v1");matching.joinRandomRoom();});}} else if (GLB.MAX_PLAYER_COUNT === 4) {if (cc.Canvas.instance.designResolution.height > cc.Canvas.instance.designResolution.width) {uiFunc.openUI("uiMatching2v2Ver", function(obj) {var matching = obj.getComponent("uiMatching2v2Ver");matching.joinRandomRoom();});} else {uiFunc.openUI("uiMatching2v2Ver", function(obj) {var matching = obj.getComponent("uiMatching2v2Ver");matching.joinRandomRoom();});}}}},

通过监听joinRoomResponsejoinRoomNotify匹配结果

uiMatchvsing1v1.js
---
joinRandomRoom: function() {var result = null;if (GLB.matchType === GLB.RANDOM_MATCH) {result = mvs.engine.joinRandomRoom(GLB.MAX_PLAYER_COUNT, '');if (result !== 0) {console.log('进入房间失败,错误码:' + result);}} else if (GLB.matchType === GLB.PROPERTY_MATCH) {var matchinfo = new mvs.MatchInfo();matchinfo.maxPlayer = GLB.MAX_PLAYER_COUNT;matchinfo.mode = 0;matchinfo.canWatch = 0;matchinfo.tags = GLB.tagsInfo;result = mvs.engine.joinRoomWithProperties(matchinfo, "joinRoomWithProperties");if (result !== 0) {console.log('进入房间失败,错误码:' + result);}}},

监听进房间操作的服务器回复和房间玩家进出情况的消息:

joinRoomResponse: function(data) {if (data.status !== 200) {console.log('进入房间失败,异步回调错误码: ' + data.status);} else {console.log('进入房间成功');console.log('房间号: ' + data.roomInfo.roomID);}GLB.roomId = data.roomInfo.roomID;var userIds = [GLB.userInfo.id]console.log('房间用户: ' + userIds);var playerIcon = null;for (var j = 0; j < data.roomUserInfoList.length; j++) {playerIcon = this.playerIcons[j].getComponent('playerIcon');if (playerIcon && !playerIcon.userInfo) {playerIcon.setData(data.roomUserInfoList[j]);if (GLB.userInfo.id !== data.roomUserInfoList[j].userId) {userIds.push(data.roomUserInfoList[j].userId);}}}for (var i = 0; i < this.playerIcons.length; i++) {playerIcon = this.playerIcons[i].getComponent('playerIcon');if (playerIcon && !playerIcon.userInfo) {playerIcon.setData(GLB.userInfo);}}GLB.playerUserIds = userIds;if (userIds.length >= GLB.MAX_PLAYER_COUNT) {var result = mvs.engine.joinOver("");console.log("发出关闭房间的通知");if (result !== 0) {console.log("关闭房间失败,错误码:", result);}GLB.playerUserIds = userIds;}},joinRoomNotify: function(data) {console.log("joinRoomNotify, roomUserInfo:" + JSON.stringify(data.roomUserInfo));var playerIcon = null;for (var j = 0; j < this.playerIcons.length; j++) {playerIcon = this.playerIcons[j].getComponent('playerIcon');if (playerIcon && !playerIcon.userInfo) {playerIcon.setData(data.roomUserInfo);break;}}

游戏同步 发布上线

还是按照上给你面的套路,新建场景(uiGamePanel.fire),挂在脚本(uiGamePanel.js).攻击的动作使用Matchvs 的 sendEventEx发出,如回合开始播放动画:

roundStart () {console.log('------roundStart------')this.timeLabelInit();clearInterval(this.interval);this.playerFlag = GLB.PLAYER_FLAG.RED;// this.getTurn(this.playerFlag);user.init();this.headColorInit();clientEvent.dispatch(clientEvent.eventType.getMap);this.playReadyGo();this.setTimeNumFont();this.setHeadIcon();},

另一方的客户端收到后处理游戏中的各种事件消息;开发完成后, 再通过CC的一键发布微信小游戏功能上线微信。

clientEvent.on(clientEvent.eventType.updateTime, this.updateTime, this);clientEvent.on(clientEvent.eventType.countTime, this.countTime, this);clientEvent.on(clientEvent.eventType.changeFlag, this.changeFlag, this);clientEvent.on(clientEvent.eventType.roundStart, this.roundStart, this);clientEvent.on(clientEvent.eventType.gameOver, this.gameOver, this);clientEvent.on(clientEvent.eventType.stopTimeWarnAnim, this.stopTimeWarnAnim, this);

联网对战游戏开发实例之《斗兽棋》(附源码)相关推荐

  1. Adroid游戏开发实例讲解(三)-小蝌蚪找妈妈附源码

    Adroid游戏开发实例讲解(三)-小蝌蚪找妈妈附源码 程序之美 从小就听着小蝌蚪找妈妈的故事长大,我相信小伙伴们一定都不陌生,因为小学课本中,我们早早的就学过了小蝌蚪找妈妈这篇文章,它既是一篇文章, ...

  2. 【Java游戏开发合集】毕业设计(附源码+资料+课件)

    为正在准备毕业设计的小伙伴们以及想自学一些Java练手项目,小编终于整理出了本套视频课程(附源码+资料+课件),快来白嫖吧!!! 视频教程链接: 全站最全Java游戏合集!毕业设计!(附源码课件)8款 ...

  3. 联网对战游戏开发实例分享之《激流竞速》(附源码)

    Matchvs是一款游戏服务器引擎,<激流竞速>这款游戏是基于Cocos Creator进行前端开发的基础上,通过接入matchvs SDK完成了联网功能的快速实现.在游戏中,双方可以进行 ...

  4. 小程序云开发实现登录与注册(附源码)

    小程序云开发实现登录与注册(附源码) 1. 看效果 2.wxss <view class="v1"><!-- v2父容器 子view使用绝对布局 -->&l ...

  5. vscode中安装webpack_leaflet-webpack 入门开发系列一初探篇(附源码下载)

    前言 leaflet-webpack 入门开发系列环境知识点了解: node 安装包下载 webpack 打包管理工具需要依赖 node 环境,所以 node 安装包必须安装,上面链接是官网下载地址w ...

  6. 基于QT开发的音乐播放器(附源码)

    基于QT开发的音乐播放器(附源码) 一.简介 1.介绍 2.功能描述 3.系统功能层次模块图 4.各模块功能描述 (1)播放界面 (2)歌词 (3)歌曲信息 (4)歌曲列表 5.文件格式 6.运行环境 ...

  7. 仿酷狗音乐播放器开发日志二十一 开发动态调色板控件(附源码)

    转载请说明原出处,谢谢~~ 上一篇仿酷狗日志结束后,整个换肤功能就只剩下调色板功能没有做了,我本以为会很简单,但是研究了酷狗的调色板功能后发现不是那么简单的事情.首先看一下酷狗的调色板的样子: 我原本 ...

  8. 联网对战游戏开源实例分享之《斗兽棋》

    本次,Matchvs为大家带来的是一款回合制休闲游戏的开源案例 .玩家双方在一个4X4的棋盘上,遵循食物链的规则玩法下进行翻牌与追逐,最终以场上存活的一方为获胜者. 体验地址: http://demo ...

  9. jsp+ssm计算机毕业设计游戏装备交易网站论文2022【附源码】

    项目运行 环境配置: Jdk1.8 + Tomcat7.0 + Mysql + HBuilderX(Webstorm也行)+ Eclispe(IntelliJ IDEA,Eclispe,MyEclis ...

最新文章

  1. 用类模拟C风格的赋值+返回值
  2. pythonunbuffered_python所遇到的坑
  3. ArrayList深入解析,看这篇就够了
  4. 【MyBatis】学习纪要六:动态SQL
  5. get占位符传多个参数_mybatis多个参数(不使用@param注解情况下),sql参数占位符正确写法...
  6. 关于缓存的几篇好文章
  7. 你可能不知道的关于 Git stash 的技巧
  8. Zabbix监控Jenkins过程详解
  9. 【HDU 5251】矩形面积【凸包 最小矩形覆盖】
  10. java中switch、while、do...while、for
  11. 服务器虚拟化三种架构,X86虚拟化之三种服务器虚拟化战略架构
  12. Excel根据快递单号自动识别快递公司
  13. 阿里云三网手机号实名认证和印刷文字识别_身份证识别
  14. 浅谈RASP技术攻防之实战
  15. CTFshow-萌新
  16. 【经验分享】调试STM32F107VC单片机驱动DP83848以太网PHY芯片时遇到的问题
  17. VCM 音圈电机 (马达)Voice Coil Motor
  18. javascript预加载图片、css、js的方法研究
  19. 初识消隐算法_艾孜尔江编撰
  20. 运输公司对用户计算运输费用。

热门文章

  1. mac使用brew安装旧版软件(php,mysql)等异常
  2. 如何用手机HTML制作哆啦a梦,HTML5利用canvas绘制哆啦A梦头部-电脑自学网
  3. JS逆向之浏览器补环境详解
  4. 控制类、电子类IEEE期刊下载资源及步骤
  5. BBI指标讲解及应用
  6. 如何在Android设备之间共享Google Play应用,音乐等
  7. sql与nosql_SQL与NoSQL:差异
  8. 【下载】阿特拉斯耸耸肩,数据治理法力无边~~
  9. 微软总裁揭示:中国将成为人工智能ChatGPT的强劲对手,商业应用加速推进
  10. 腾讯课堂点播上云客户端实践总结