专栏首页Golang语言社区社区开源框架网络模块:ConnectionManager详解

社区开源框架网络模块:ConnectionManager详解

地址:https://github.com/Golangltd/LollipopCreator

框架文档地址:GameAIs.Com

LollipopCreator:ConnectionManager

LollipopCreator游戏框架

游戏客户端开发中,由于制作人或者策划立项的不同,导致前端开发并不像后端框架不变,例如 2D游戏开发,引擎选择就比较多,Unity、cocos、 白鹭等都可以,本系列就是给大家开源一套cocos creator引擎开发的2D游戏框架LollipopGo。 creator 系统为例,给大家梳理下前端2D游戏架构的基础设计思想。

Index

返回首页

  • 如何设计
  • 调用流程
  • 实例代码

如何设计

1. 连接数据加载和处理,主要是网络相关。

调用流程

例子:
    checkOffline: function (dt) {
        // 是否会登录
        if (!this.logined) {
            return
        }
        // 是否是弹框
        if (this.asking) {
            return
        }
        // 心跳
        this.heartbeat()
        this.elapsed += Math.min(0.5, dt)
        if (this.elapsed < 10) {
            return
        }
        cc.log("掉线了,马上重连", this.elapsed)
        this.elapsed = 0
        if (this.tries < 10) {
            this.tries++
            client.reLogin()
            eventMgr.emit('connect-tip', this.tries)
            cc.log("网络中断,拼命连接中.....", this.tries)
            this.showCommonTip(this.tries)
        } else {
            cc.log("弹出重连ui", this.tries)
            this.popAskDialog()
            this.showCommonAsk()
        }
    },
	注意点:检查是否断线

实例代码

cc.Class({
    extends: cc.Component,

    properties: {
        tip: cc.Node,
    },
    
    onLoad: function () {
        window.connMgr = this
        this.logined = false
        this.tries = 0
        this.asking = false
        this.elapsed = 0
        this.isreconnect = false
        this.tip.active = false
        let n = 0
        // this.schedule((dt) => {
        //     this.checkOffline(dt)
        // }, 0.5, 1e7, 0)
    },

    checkOffline: function (dt) {
        // 是否会登录
        if (!this.logined) {
            return
        }
        // 是否是弹框
        if (this.asking) {
            return
        }
        // 心跳
        this.heartbeat()
        this.elapsed += Math.min(0.5, dt)
        if (this.elapsed < 10) {
            return
        }
        cc.log("掉线了,马上重连", this.elapsed)
        this.elapsed = 0
        if (this.tries < 10) {
            this.tries++
            client.reLogin()
            eventMgr.emit('connect-tip', this.tries)
            cc.log("网络中断,拼命连接中.....", this.tries)
            this.showCommonTip(this.tries)
        } else {
            cc.log("弹出重连ui", this.tries)
            this.popAskDialog()
            this.showCommonAsk()
        }
    },

    heartbeat() {
       // if (this.isreconnect) return
        client.send({
            Protocol: 7,
            Protocol2: 81,
            Uid: me.UID
        })
    },

    reset(logined) {
        eventMgr.emit('connect-tip', 0)
        this.isreconnect = false
        this.elapsed = 0
        this.logined = logined
        this.tries = 0
        this.tip.active = false
        cc.log("reset", this.tries)
        if (logined) {
            this.heartbeat()
        }
    },

    popAskDialog() {
        if (this.asking) {
            return
        }
        this.asking = true
        eventMgr.emit('connect-tip', 0)
        eventMgr.emit('connect-dialog')
    },

    reconnect: function () {
        this.asking = false
        this.tries = 1
        this.elapsed = 0
        client.reLogin()
        eventMgr.emit('connect-tip', this.tries)
        cc.log("网络中断,拼命连接中.....", this.tries)
    },

    showCommonTip: function (tries) {
        this.tip.active = (tries > 0)
        if (tries > 0) {
            this.tip.PathChild('val', cc.Label).string = `网络中断,拼命连接中...(${tries})`
        }
    },

    showCommonAsk: function () {
        this.tip.active = false
        UIMgr.show("MessageBox", "游戏已断开连接 请重新连接", 'ok', () => {
            cc.audioEngine.stopAll()
            cc.game.restart()
        })
    },
});

版权申明:内容来源网络,版权归原创者所有。除非无法确认,我们都会标明作者及出处,如有侵权烦请告知,我们会立即删除并表示歉意。谢谢。

本文分享自微信公众号 - Golang语言社区(Golangweb),作者:彬哥

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-09-02

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 【JS游戏编程基础】关于js里的this关键字的理解

    this关键字在c++,java中都提供了这个关键字,在刚开始学习时觉得有难度,但是只要理解了,用起来就方便多了,下面通过本篇文章给大家详解js里this关键字...

    李海彬
  • Oculus + Node.js + Three.js 打造VR世界

    Oculus Rift 是一款为电子游戏设计的头戴式显示器。这是一款虚拟现实设备。这款设备很可能改变未来人们游戏的方式。 周五Hackday Showcase的...

    李海彬
  • go 无锁队列

    无锁队列适用场景:      两个线程之间的交互数据, 一个线程生产数据, 另外一个线程消费数据,效率高 缺点:需要使用固定分配的空间,不能动态增加/减少长度...

    李海彬
  • 【转】js中this用法

    只有一个对象调用了包含this函数时,this才被赋值,并且所赋的值只依赖于调用了包含this函数的对象

    前端博客 : alili.tech
  • 【干货】Cocos Creator制作一个微信小游戏(下)

    | 导语 微信小游戏都火成这样了,为什么不尝试一下? 我们的目标是使用Cocos Creator从零开始制作一个小游戏,并放到微信上玩。 上文链接:Cocos...

    腾讯NEXT学位
  • 确认过眼神,你是喜欢Stream的人

    摘要:在学习Node的过程中,Stream流是常用的东东,在了解怎么使用它的同时,我们应该要深入了解它的具体实现。今天的主要带大家来写一写可读流的具体实现,就过...

    用户2145235
  • 寿司开卖:实现寿司制作特效和音响特效

    本节我们将继续上一节完成若干个小功能。首先要完成的是,当客户动画在主页面出现时,它左上角会冒泡,显示它想购买何种寿司,此时玩家可以点击左下角面板中各种元素,组合...

    望月从良
  • Java基础:五、this关键字、static含义(4)

    如果只有一个peel()方法,如何知道是被a还是b所调用的呢?因为编译器会把“所操作对象的引用”作为第一次参数传递给peel()。所以上述两个方法的调用就变成了...

    桑鱼
  • VUE+WebPack游戏设计:欲望都市城市图层的设计

    望月从良
  • 小游戏入门

    极乐君

扫码关注云+社区

领取腾讯云代金券