初识微信小游戏云开发

        之前做了几款单机休闲小游戏,都是上架的微信小游戏。游戏关卡都是保存的本地存储,然后经常被玩家吐槽关卡数据没了,又从第一关开始。可能是玩家主动清缓存或者从任务栏删除了吧。作为一名客户端开发,我也很无奈。还好微信提供了云开发的方案。

        开始试水。

一、使用云开发的目的:很简单,就是记录玩家的当前关卡。

二、方案:一张表(playerdata),两个云函数(获取当前关卡、上报当前关卡)

三、前置工作。

        微信小游戏工程,已经注册APPID,已经开启云服务(首月免费)。这里我的小游戏用的是Cocos Creator开发。

四、开工。

1、打开云开发控制台。点击微信开发工具左上角的“云开发”按钮打开控制台

        

2、建表。先点击控制台界面的“数据库”按钮,进入数据库界面。左边点击"+"号新建集合(表),这里我们建立了一张playerdata的表。然后再添加表的字段。        

3、创建云函数。选中云函数目录,右键,弹出菜单中可以"新建Node.js云函数"。这里我们建立两个云函数

(1)获取当前关卡(getselfdata)。这里需要考虑玩家第一次玩这个游戏,数据库中没有记录,那么返回一个默认值1。

// 云函数入口文件
const cloud = require('wx-server-sdk')

cloud.init() // 使用当前云环境
const db = cloud.database()//引用云数据库
const playerdata = db.collection("playerdata")//引用data数据表

// 云函数入口函数
exports.main = async (event, context) => {
    const wxContext = cloud.getWXContext()
    let isHas =await playerdata.where({ openId:wxContext.OPENID}).get(); 
    if (Array.isArray(isHas.data) && isHas.data.length === 0) 
    {
        let isAdd = null
        let addData = { 
            openId:wxContext.OPENID,
            nickname:"",
            headUrl:"",
            curlevel:1,
        }
        //把获取的数据添加到数据库
        await playerdata.add({ 
            data:addData,
            success: function(res) {
                console.log("add success")
                console.log(res)
            },
            fail: function(res) {
                console.log("add fail")
                console.log(res)
            },
            complete: function(res) {
                console.log("add complete")
                console.log(res)
            }
        })
        return addData//isAdd.data[0]
    }else
    {
        return isHas.data[0]
    } 
}

(2)上报玩家当前关卡(updaterecord)。

// 云函数入口文件
const cloud = require('wx-server-sdk')
cloud.init() // 使用当前云环境
const db = cloud.database()//引用云数据库
const playerdata = db.collection("playerdata")//引用data数据表
// 云函数入口函数
exports.main = async (event, context) => {
    const wxContext = cloud.getWXContext()
    let isHas =await playerdata.where({ openId:wxContext.OPENID}).get(); 
    if (Array.isArray(isHas.data) && isHas.data.length === 0) {
        let isAdd = null
        let addData = { 
            openId:wxContext.OPENID,
            nickname:"",
            headUrl:"",
        }
        if(event.curlevel)
        {
          addData.curlevel = event.curlevel;
        }
        //把获取的数据添加到数据库
        isAdd = playerdata.add({ 
            data:addData,
            success: function(res) {
                console.log("add success")
                console.log(res)
            },
            fail: function(res) {
                console.log("add fail")
                console.log(res)
            },
            complete: function(res) {
                console.log("add complete")
                console.log(res)
            }
        })
        console.log("add data")
    } else {
        let updateData = {}
        if(event.curlevel)
        {
            updateData.curlevel = event.curlevel;
        }
        if(event.nickname)
        {
            updateData.nickname = event.nickname;
        }
        if(event.headUrl)
        {
            updateData.headUrl = event.headUrl;
        }
        console.log(updateData);
        let updateResult = await playerdata.doc(event._id).update(
            {
                data : updateData,
                success: function(res) {
                    console.log("upadte success")
                    console.log(res)
                },
                fail: function(res) {
                    console.log("upadte fail")
                    console.log(res)
                },
                complete: function(res) {
                    console.log("upadte complete")
                    console.log(res)
                }
              })
    }
    return {
        event,
        openid: wxContext.OPENID,
        appid: wxContext.APPID,
        unionid: wxContext.UNIONID,
    }
}

4、云函数相关操作。对于一名客户端研发,云函数操作这块还是有很多值得注意的地方。

(1)本地调试。这里我们可以输入一个json格式的输入,来调试我们创建的云函数,运行结果可以对数据库进行操作。

(2)上传并部署。当前我们建立的云函数还只是在电脑本地,云服务器上面还没有这个函数。经常会出现有人问:“本地调试有返回结果,游戏运行中却没效果”。这是因为还没将云函数部署到服务器,右键云函数,选择“上传并部署”,一般这里不上传node_modules。

(3)同步云函数列表及下载。当我们重新打包游戏客户端,云函数的目录会被清理掉。如果要继续对云函数进行调整,需要先同步云函数列表,并下载对应的云函数。

五、上线结果。

        一直以为我做的渣渣游戏,20块一个月的额度完全够用。直到游戏中真的上线了云服务,我才发现套餐中20万次调用完全不够。玩家每次进入游戏会调用一次“获取当前关卡”,每次通关会调用“上报关卡”,玩家进进出出+通关,人均调用10次,日活跃一千就是1万次,20万次只够20天,还得继续买服务额度。

        我的游戏中还加了世界排行榜,有时间再写一篇。需要看效果的可以扫码体验。

        

        

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值