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

国产97人人超碰caoprom_尤物国产在线一区手机播放_精品国产一区二区三_色天使久久综合给合久久97