• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • Unity結合Flask實現排行榜功能(2)

    發表于:2015-04-01來源:uml.org.cn作者:娃娃點擊數: 標簽:Unity
    這里的id其實是自增主鍵,可以不必保留,但為了后面處理方便就一起保留了。 POST提交的JSON格式如下: { id: 0, name: C, score: 300 } 現在我們可以著手實現i

      這里的id其實是自增主鍵,可以不必保留,但為了后面處理方便就一起保留了。

      POST提交的JSON格式如下:

    {
      "id": 0,
      "name": "C",
      "score": 300
      }

      現在我們可以著手實現index方法了:

    def index():
      cur = g.db.execute('select id, name, score from rank order by score desc;')
      result = cur.fetchmany(100)
      data = []
      for row in result:
      data.append({'id': row[0], 'name': row[1], 'score': row[2]})
      return jsonify({'data': data})

      (其中jsonify和g在flask模塊內。后面不再對導入進行說明,默認都是從flask導入。)

      在查詢時對數據做了排序,并且只返回了前100條記錄??梢杂胏url再測試一下。測試無誤再實現create方法:

    def create():
      status = {'status': 'OK'}
      if not request.json or not 'name' in request.json or not 'score' in request.json:
      status['status'] = 'bad request'
      try:
      g.db.execute('insert into rank (name, score) values (?, ?)', [request.json['name'], request.json['score']])
      g.db.commit()
      except:
      status['status'] = 'database error'
      return jsonify(status)

      我們的POST請求都是JSON類型的,所以要從request.json獲得,而不是args或者form。此外,返回了一個status變量,便于查看出錯原因。

      再用curl測試一下POST。這次,我們要向POST請求中加入數據:

    curl -i -X POST -H "Content-Type: application/json" -d '{"id": 0, "name": "xyz", "score": "800"}' 127.0.0.1:5000/scores

      -H參數用于指定頭部信息,-d參數可以攜帶數據,這里就是一條符合我們提交格式的JSON數據。

      現在服務器端就(暫時)實現完了。下面該寫C#代碼啦。

      我們需要設計一個和服務器交互、并返回數據給UI層的類。

      首先,這個類應該是單例的,要繼承MonoBehaviour(因為和服務器交互要利用Coroutine);而且最好獨立于場景之外。關于Unity中實現單例類的集中方式,請看我的另一篇文章。單例的代碼如下:

    private static SaveLoad _instance = null;
    public static SaveLoad Instance {
    get
    {
    if (_instance == null)
    {
    GameObject go = new GameObject("SaveLoadGameObject");
    DontDestroyOnLoad(go);
    _instance = go.AddComponent<SaveLoad>();
    }
    return _instance;
    }
    }

      還需要定義一些常量:

    const int recordsPerPage = 5;
      const string URL = "127.0.0.1:5000/scores";

      定義一個數據結構:

    public struct Data {
      public int id;
      public string name;
      public int score;
      }

      在動手之前,還要了解兩個東西:WWW類和LitJson庫。WWW類是Unity自帶的處理HTTP請求的類;LitJson是一個C#處理JSON的開源庫。要使用LitJson,先從官網下載dll文件,然后導入Asset。

      SaveLoad類的功能就像名字一樣,包括保存Save和載入Load。

    原文轉自:http://www.uml.org.cn/Test/201503235.asp

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>