主页 > canvas引擎 > Phaser游戏引擎 >
来源:未知 时间:2019-08-20 11:46 作者:小飞侠 阅读:次
[导读] 今天带来Phaser微信小游戏开发教程三教程, 写在前面的话:这篇文章涉及到一些后端知识,这里不会放出服务器代码,想要代码的同学可以加入QQ群,找站长要。 微信登录几乎是每个游...
今天带来Phaser微信小游戏开发教程三教程, 写在前面的话:这篇文章涉及到一些后端知识,这里不会放出服务器代码,想要代码的同学可以加入QQ群,找站长要。 微信登录几乎是每个游戏都需要考虑的问题,同样,用户信息,好友排名等等,也是如此,这篇文章我们逐一探讨。 如何拿到用户id? 首先我们来说说如何实现微信登录,其实微信登录的api很简单,就是wx.login,在success的回调中,你会拿到一个code,这时候,你要拿着这个code去请求后端,得到返回的openid,这个openid就相当于用户id了。至于后端的逻辑我们稍后再说,这里先说说openid。每一个微信用户都有一个openid,它们是一一对应的关系,但是openid并不是微信号,因为微信号这种信息,腾讯是不会给你的。 现在说说后端拿到code之后,怎么处理,其实很简单,后端拿到code之后,将它连同appid和appsecret一起作为参数,请求jscode2session接口获取用户的openid,注意,code只能用一次。这里接口会返回openid和sessionid,很明显,sessionid是微信的sessionid,并不建议保存到客户端,所以这里我们一般会做一个处理,我们会把我们自己服务器的sessionid和openid做一个映射放到缓存,然后将自己服务器的sessionid和openid返回。 如何获取用户信息? 用户信息其实是在另外一个接口中,叫做wx.getUserInfo,在回调中,你能够获取到用户昵称、用户头像、用户性别、用户城市、省份、国家6个信息。那么有人就要问了,既然这里就能够获取到用户信息,那么为什么还要去用wx.login获取什么openid呢?原因很简单,因为wx.getUserInfo获取到的6个信息,没有一个能够用来作为id,用户的昵称可能是重复的,用户的头像地址也可能是会变化的。所以这里我们要把之前获取到的openid和这里的信息结合起来,形成一条用户记录,推到数据库。 用户登录流程小结: 1、先本地取sessionId, 取到后调用wx/refresh_session.php,查看sessionId是否还能用,不能用重新login 取不到调用wx.login请求wx/onlogin.php,拿到sessionId 2、调用wx.getUserInfo,获取用户信息 用户拒绝则进入游客模式 3、获取到信息后,用sessionId,调用wx/user_info.php,上报用户信息,这里获取用户其他游戏数据并保存本地 其实到这里,我们就可以做出世界排名这种东西了,但是没办法做出好友排名。下面我们看看如何实现好友排名。 如何获取好友信息? 好友信息在微信中叫做关系链,包括两个方面,用户好友和群友。我们先给出文档地址,不了解的伙伴可以去了解一下,小游戏文档:https://developers.weixin.qq.com/minigame/dev/document/render/canvas/wx.createCanvas.html 小程序文档:https://developers.weixin.qq.com/miniprogram/dev/api/ 文档我是建议通读的,至少目录要通读,避免遗漏重要信息。 很明显,我们要用到开放域。大家重点看关系链数据使用指南这篇文章,我这里给出核心代码: 设置游戏数据,这个数据是存储到了腾讯的服务器,并且这个函数可以在主域中使用: wx.setUserCloudStorage({ KVDataList: [{ key: "score", value: scoreValue + "" }], success: function() { console.log('save score ' + scoreValue + ' success'); }, fail: function() { console.log('save score ' + scoreValue + ' fail'); }, complete: function() { console.log('save score ' + scoreValue + ' complete'); }}); 获取游戏数据的时候,只能在开放域使用,主域通过postMessage发送消息: wx.getUserCloudStorage({ keyList: ["score"], success: function(obj) { if(obj.KVDataList) { for(var i=0; i<obj.KVDataList.length; i++) { console.log('get ' + obj.KVDataList[i].key + ' : ' + obj.KVDataList[i].value); } } else { console.log('KVDataList null'); } }, fail: function() { console.log('get data fail'); }, complete: function() { console.log('get data complete'); }}); 获取好友游戏数据的时候,同样只能在开放域使用,主域通过postMessage发送消息: wx.getFriendCloudStorage({ keyList: ["score"], success: function(obj) { console.log(obj) if(obj.data) { for(var i=0; i<obj.data.length; i++) { console.log('get ' + obj.data[i].nickname + ' : ' + obj.data[i].avatarUrl); if(obj.data[i].KVDataList) { for(var j=0; j<obj.data[i].KVDataList.length; j++) { console.log('get ' + obj.data[i].KVDataList[j].key + ' : ' + obj.data[i].KVDataList[j].value); } } } } else { console.log('KVDataList null'); } }, fail: function() { console.log('get friend data fail'); }, complete: function() { console.log('get friend data complete'); }}) 最后,绘制排行榜,其实就是在开放域将好友数据绘制到canvas中,再把canvas传给主域,这里感谢网友aleaf给出的方案:http://club.phaser-china.com/topic/5af6bf52484a53dd723f42e1,实现代码已经放到了案例中,大家可以查看:https://github.com/channingbreeze/phaser-wxdemo 这里我们再来解释一下,为什么微信要搞这么复杂呢?又是开放域,又是主域的。我相信聪明的读者肯定已经猜到,是为了用户数据安全。用户数据从来都是非常敏感和重要的信息,绝对不可能通过简单的接口就透露出来,特别是好友关系这种数据,很容易被不法分子和黑客利用。但是作为微信小游戏,有需要好友排名这种功能,怎么办呢?所以微信实现了开放域这样一套机制,只允许在开放域中获取好友信息,并且开放域中的数据不能发送出来,只能画在canvas上,形成图片,再通过drawImage方式被绘制到主域,可谓用心良苦。 以上就是今天带来Phaser微信小游戏开发教程三教程全部教程,感谢大家支持自学php网。 |
自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习
京ICP备14009008号-1@版权所有www.zixuephp.com
网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com