egret.localStorage接口 //保存数据 export let getItem:(key:string)=>string; //删除数据 export let removeItem:(key:string)=>void; //将所有数据清空 export let clear:()=>void; Web实现类WebLocalStorage.ts namespace egret.localStorage.web { function getItem(key:string):string { return window.localStorage.getItem(key); } function setItem(key:string, value:string):boolean { try{ window.localStorage.setItem(key, value); return true; } catch(e){ egret.$warn(1047, key, value); return false; } } function removeItem(key:string):void { window.localStorage.removeItem(key); } function clear():void { window.localStorage.clear(); } localStorage.getItem = getItem; localStorage.setItem = setItem; localStorage.removeItem = removeItem; localStorage.clear = clear; }
可以看到内部其实也是采用了window.localStorage来进行实现,同时做了一场处理,最后是通过localStorage接口进行赋值给外部调用。下面是实际使用方法:
//使用egret的本地存放方法做 egret.localStorage.setItem("reload",reload); //游戏中获取 var reload:string = egret.localStorage.getItem("reload");
四、实际项目中处理重连机制
这里的代码是刷新之后重新进入游戏,然后通过之前的数据(url或者本地缓存)解析出相应的数据来进行判断。
解析url
var reload:string = location.href;
本地缓存获取数据
var reload:string = egret.localStorage.getItem("reload"); console.info("reload数据:" + reload); if(reload && reload != "") { var cooks:string[] = reload.split("#"); console.info("断线重连刷新过来的"); this.session.isReload = true; this.session.host = cooks[0]; this.session.token = cooks[1]; this.session.serverId = Number(cooks[2]); this.session.serverName = cooks[3]; }
通过游戏内的变量进行判断处理
if(this.session.isReload) { //开始自动重连,走额外的协议以及自动处理 } else { //走正常的流程 }
最后的总结
断线重连这里主要是讲了一些思路以及实际项目中的应用。代码算是伪5代码了,读者应该根据自己项目实际情况来设计,做一些相应变化,原理是一样的。
我们有一个项目是有遇到过其中的一个问题,因为一开始没有考虑自动重连的问题,在客户端和服务器都没这里的考虑。所以没办法做到不刷新游戏来进行重连(主要是成本太大,又是arpg游戏),最终是选择了游戏自己刷新来实现的机制的。当然也会遇到一些坑,比如接入一些平台,只能刷新自己的html,无法刷新平台的html(游戏内嵌),导致平台的sdk的问题(影响充值、关注等等)。不过最终都是有通过变通之类的进行解决了。
以上所述是小编给大家介绍的JavaScript实现HTML5游戏断线自动重连的方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!
您可能感兴趣的文章: