hit_my_mouse
使用laya2.4的H5游戏引擎开发
- laya里调用微信api的前缀Laya.Browser.window.
*比如调用云函数接口的:Laya.Browser.window.wx.cloud.callFunction()……
游戏中使用到了云开发中的云函数和云数据库
云开发:打开微信开发工具后在左上角有一栏云开发可以开启云开发服务
云函数:由于用户进来后的openId属于玩家的私密信息,前端里面要获取的话只能在微信公开域或者使用云函数查询获取,所以编写了一个云函数来获取
在微信项目根目录下的:project.config.json 中配置:”cloudfunctionRoot”: “functions/“,,指定云函数的目录,然后在目录下编写云函数,测试后上传即可。
云数据库:是一个JSON 数据库,在云数据库后台建立了一个user集合,这样便能在前端中调用相关增删改查的接口写入数据
云数据库权限设置:所有人可读仅创建者可写入(仅针对此游戏),在云开发后台进行设置
初始化在打开游戏的时候进行
云开发初始化:
1
2
3wx.cloud.init({
env: 'lcy-xhwgt'()
})云数据库初始化:
1
2
3wx.cloud.database({
env: 'lcy-xhwgt'
});云数据库User的定义:
_id:固有的,代表数据属于哪一个玩家的
_openid:自定义的,用户数据库where语句的查询
avatarUrl:存储用户头像
nickName:用户昵称
score:用户最高分数
云数据库查询:
1
2
3
4
5
6
7db.collection('user').where({
_openid: gameData.player.id, //查询条件
})
.get().then(res => {
// res.data 包含该记录的数据
// console.log(res.data.length);
}云数据库插入:
- 新玩家登陆时在数据库创建用户(创建用户前,先查询确保玩家在数据库中没有数据,然后再插入数据)
1
2
3
4
5
6
7
8
9
10
11db.collection('user').add({
// data 字段表示需新增的 JSON 数据
data: {
_id:gameData.player.id,
avatarUrl:gameData.player.avatarUrl,
nickName:gameData.player.nickName,
}
})
.then(res => {
// console.log(res)
})
- 新玩家登陆时在数据库创建用户(创建用户前,先查询确保玩家在数据库中没有数据,然后再插入数据)
云数据库更新:
- 在玩家打完一局后更新玩家在数据库中记录的最佳分数
1
2
3
4
5
6
7db.collection('user').doc(id).update({
// data 字段表示需更新的 JSON 数据
data:content,
success: function(res) {}.bind(this),
fail: function(res) {}.bind(this),
})
- 在玩家打完一局后更新玩家在数据库中记录的最佳分数
云函数调用:
1
2
3
4
5
6
7
8
9
10
11wx.cloud.callFunction({
// 云函数名称
name: funcName,
// 传给云函数的参数
data: {
desc:"get UID"
},
success: function(res) {}.bind(this),
fail: function(res) {}.bind(this),
})使用的云函数定义:
1
2
3
4
5
6
7
8
9
10
11// 云函数入口函数
exports.main = async (event, context) => {
const wxContext = cloud.getWXContext()
//return 返回数据,自定义的
return {
type:"getUID",
openid: wxContext.OPENID,
appid: wxContext.APPID,
unionid: wxContext.UNIONID,
}
}
游戏模式两种:
- 单机模式,玩家打地鼠,打中正确的加分;打中错误的扣分;
- 异步挑战模式:玩家从朋友发起的挑战链接进入游戏,挑战朋友在云数据库里存储的最高分数;打中朋友头像加分,打中自己头像减分
进入游戏,先初始化云开发(云开发和云数据库)
然后调用微信小游戏端的接口获取用户信息:(如果能直接获取到用户信息,那么不需要用户再次授权,没获取到用户信息说明需要绘制授权按钮,向玩家请求授权),然后调用云函数获取用户的openid
1 | wx.getUserInfo({ |
如果玩家是通过分享链接进来的,那么打开游戏时还需要挂起微信的onshow监听,能够获取到玩家进入时携带的参数
1 | wx.onShow(res => { |
分享接口
1 | const shareInfo = { |
如果玩家从朋友分享的挑战链接进入,那么将会获取到链接携带的玩家openid,然后根据openid从云数据库查询到对应的玩家分数,昵称,头像数据
如果要在小游戏中显示出玩家头像,需要在小游戏后台设置
+ downloadFile合法域名:https://wx.qlogo.cn