微信雲開發使用教程

前言

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

微信雲開發技術可讓咱們免費方便的使用服務器的部分功能,對於微信小遊戲很是有幫助。數據庫

本教程只針對新人,由於我本身就是個新人,若有錯誤,請你們批評指正。json

1. 微信雲開發服務端

每一個小遊戲能夠配備兩個雲開發服務器,推薦一個用來測試,一個用來發布。首先咱們把作好的遊戲構建、運行,在微信開發者工具中打開雲開發,如圖所示:服務器

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

打開後的頁面以下,輸入環境名稱,自動生成一個環境IDwatermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=微信

點擊肯定,進入雲開發控制檯,這裏咱們就能夠從上面看到它的功能:數據庫、存儲管理、雲函數,請看下圖:watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=網絡

接下來試一下雲函數功能,建立一個雲函數,查看一下基礎信息watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=微信開發

在圖中能夠看到提交方法,按照步驟操做 ,加入這一行代碼,左邊新建一個文件夾,請看下圖:watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=ide

左邊新建Node.js函數,取個名字,好比「getopenid」,右邊能夠編寫雲函數代碼,也是js代碼,只不過是運行在雲開發環境的js代碼watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=函數

完成後,右鍵上傳部署,以後再次構建就能夠直接使用了,無需再次重複這些步驟watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=工具

2. 小遊戲中的調用方法

獲取openid

  1. //初始化雲服務器post

  2. wx.cloud.init({

  3.    traceUser: true,

  4.    env: 'box-8e6f64'

  5. })

  6. //調用雲函數

  7. wx.cloud.callFunction({

  8.    name: 'getopenid',

  9.    complete: res => {

  10.        cc.sys.localStorage.setItem('openid', res.result.openid);

  11.    }

  12. })

利用這種方法就能夠取到openid了,用戶上傳分數的時候能夠利用openid查詢一下是否已存在記錄,避免重複上傳。

數據庫的操做方法

如今雲函數控制檯點擊數據庫建立本身須要的表,無需建立字段,只要有名字就能夠,好比worldrank而後就能夠在小遊戲裏進行增刪改查操做了,看下面代碼:

  1. const DB = wx.cloud.database()

  2. DB.collection('worldrank').where({

  3.    _openid: cc.sys.localStorage.getItem('openid'),

  4. })

  5. .get({

  6.    success(res) {

  7.        //console.log(res.data[0]._id)

  8.        if (res.data.length > 0) {

  9.            DB.collection('worldrank').doc(res.data[0]._id).update({

  10.                data: {

  11.                    score: myscore

  12.                },

  13.                success(res) {

  14.                }

  15.            })

  16.        }

  17.        else {

  18.            DB.collection('worldrank').add({

  19.                data: {

  20.                    score: myscore

  21.                },

  22.                success(res) {

  23.                }

  24.            })

  25.        }

  26.    }

  27. })

經過小遊戲上傳的數據會自動增長一個openid字段,存放用戶的openid,也就是說上面這段代碼上傳到數據庫後,worldrank表裏存放的是:

  1. {

  2.    'id':'自動生成',

  3.    '_openid':'用戶openid',

  4.    'score':'用戶得分'

  5. }

更多數據庫使用方法請參考官方文檔。

排行榜

有了玩家的數據,而後就能夠進行製做排行榜了,查詢數據庫,將數據排序後發送到開放數據域,開放數據域接收後就能夠直接繪製了

  1. DB.collection('worldrank').limit(20)

  2.    .orderBy('score', 'desc')

  3.    .get({

  4.        success: function (res) {

  5.            wx.postMessage({

  6.                rankdata: res.data,

  7.            });

  8.        }

  9.    })

limit(20)表示只能取20條數據,在小遊戲端查詢數據庫最多隻能查詢20條記錄,若是把調用方法寫到雲函數裏,則能夠查詢到最多100條數據,官方有例子能夠循環屢次取出全部數據,可是咱們只作排行榜的話100條數據已經足夠了。 開放數據域接收到rankdata,也就是前面的這樣一組json數據:

  1. {

  2.    'id':'自動生成',

  3.    '_openid':'用戶openid',

  4.    'score':'用戶得分'

  5. }

而後經過getUserInfo獲取用戶的頭像、暱稱信息、繪製排行榜,具體代碼以下:

  1. for (var i = 0; i < rankdata.length; i++) {

  2.    var list = [];

  3.    var score = rankdata.score;

  4.    list.push(rankdata._openid);

  5.    wx.getUserInfo({

  6.        openIdList: list,

  7.        success: (userRes) => {

  8.            let userData = userRes.data[0];

  9.            var avatarUrl = userData.avatarUrl;

  10.            var nick = userData.nickName;

  11.        },

  12.        fail: (res) => {

  13.            this.loadingLabel.getComponent(cc.Label).string = "數據加載失敗,請檢測網絡,謝謝。";

  14.        }

  15.    })

  16. }

補充:game.json文件加一句"cloud": true。

3. 結語

 寫得比較匆忙,歡迎補充、交流和吐槽,小遊戲樣例,請忽略這粗糙的美工!

相關文章
相關標籤/搜索