LitJson做简易排行榜
……
……
这是打包到安卓手机上运行后的最终效果截图(我玩了三把,然后这三把的数据就显示在了排行榜中):
首先分析一下,这个是在做什么?
其实就是记录一下玩家每一局游戏所需要的时间,然后做成排行榜供玩家查看。
我不讲知识点,只是记录一下自己做这个排行榜的思路和过程。
……
……
1;第一步,首先是将LitJson的源代码复制到自己的项目中。
……
……
2;第二步,要明白一件事情,排行榜的json信息,是必须存储在Application.persistentDataPath这个路径下,这个路径安卓手机和电脑都是通用的,如果是其它路径的话就不行。
……
……
3;第三步,要在Application.persistentDataPath下创建三个初始的json文件(分别用来存储最高记录、第二名、第三名的游戏时间),只有先创建文件了,才能够为之后不断的读写操作做准备。而且一定有一点要注意,只能创建一次文件,不能每一次运行游戏都初始化创建一次,那样排行榜的信息就会丢失掉了。
这是我为了做排行榜专门创建一个类,在这个类的Start中,我首先用一个if判断了在Application.persistentDataPath路径下是否存在了我需要创建的文件,如果没有的话就进行if里面的初始化创建,如果有的话就不创建(必须进行判断)。这样一来,当游戏运行后,就只会进行一次文件的初始化创建,创建了之后就不会进入这个if语句了。
……
……
4;第四步,做一个排行榜的UI,然后要获取Text组件来进行排行榜的数据的显示。
如上图所示,这一段代码是专门用来做展示用的,可以将时间转换为时分秒,当玩家打开排行榜的时候,就调用该脚本获取存储时分秒的数据,并用Text进行显示。
……
……
5;第五步,排行榜数据的更新。玩家每结束一局游戏后,可以得到一个玩家游玩的时间,只要把这个游玩时间和排行榜上的三个数据进行对比,然后更新排行榜就可以了。逻辑如下图所示:
……
……
做完上面五步,一个简单的排行榜就做完了。
以下为该类的所有代码:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using LitJson;
using System.IO;
public class Charts_message
{
public int order;
public float time;
}
public class JsonIO : MonoBehaviour
{
Charts_message c1;
Charts_message c2;
Charts_message c3;
void Start()
{
if (!(File.Exists(Application.persistentDataPath + "order1.json")))
{
初始化排行榜的数据
c1 = new Charts_message();
c2 = new Charts_message();
c3 = new Charts_message();
c1.order = 1;
c1.time = 0;
c2.order = 2;
c2.time = 0;
c3.order = 3;
c3.time = 0;
string s1 = JsonMapper.ToJson(c1);
string s2 = JsonMapper.ToJson(c2);
string s3 = JsonMapper.ToJson(c3);
File.WriteAllText(Application.persistentDataPath + "order1.json", s1);
File.WriteAllText(Application.persistentDataPath + "order2.json", s2);
File.WriteAllText(Application.persistentDataPath + "order3.json", s3);
}
}
public static void charts_Upload(float time)
{
string json1=File.ReadAllText(Application.persistentDataPath + "order1.json");
string json2=File.ReadAllText(Application.persistentDataPath + "order2.json");
string json3=File.ReadAllText(Application.persistentDataPath + "order3.json");
Charts_message ch1 = JsonMapper.ToObject<Charts_message>(json1);
Charts_message ch2 = JsonMapper.ToObject<Charts_message>(json2);
Charts_message ch3 = JsonMapper.ToObject<Charts_message>(json3);
List<float> chartList = new List<float>();
chartList.Add(time);
chartList.Add(ch1.time);
chartList.Add(ch2.time);
chartList.Add(ch3.time);
chartList.Sort();
ch1.time = chartList[3];
ch2.time = chartList[2];
ch3.time = chartList[1];
charts_Upload1(ch1, ch2, ch3);
}
private static void charts_Upload1(Charts_message ch1,Charts_message ch2,Charts_message ch3)
{
string s1 = JsonMapper.ToJson(ch1);
string s2 = JsonMapper.ToJson(ch2);
string s3 = JsonMapper.ToJson(ch3);
File.WriteAllText(Application.persistentDataPath + "order1.json", s1);
File.WriteAllText(Application.persistentDataPath + "order2.json", s2);
File.WriteAllText(Application.persistentDataPath + "order3.json", s3);
}
//将数据展示为时分秒
public static int[] charts_play()
{
string json1 = File.ReadAllText(Application.persistentDataPath + "order1.json");
string json2 = File.ReadAllText(Application.persistentDataPath + "order2.json");
string json3 = File.ReadAllText(Application.persistentDataPath + "order3.json");
Charts_message ch1 = JsonMapper.ToObject<Charts_message>(json1);
Charts_message ch2 = JsonMapper.ToObject<Charts_message>(json2);
Charts_message ch3 = JsonMapper.ToObject<Charts_message>(json3);
int time1 =(int) ch1.time;
int time2 =(int) ch2.time;
int time3 =(int) ch3.time;
int h1, m1, s1,h2,m2,s2,h3,m3,s3;
h1 = time1 / 3600;
m1 = (time1-h1*3600)/60;
s1 = time1 - h1 * 3600 - m1 * 60;
h2 = time2 / 3600;
m2 = (time2 - h2 * 3600) / 60;
s2 = time2 - h2 * 3600 - m2 * 60;
h3 = time3 / 3600;
m3 = (time3 - h3 * 3600) / 60;
s3 = time3 - h3 * 3600 - m3 * 60;
int[] charts_TimeData = new int[] { h1, m1, s1, h2, m2, s2, h3, m3, s3 };
return charts_TimeData;
}
}