12.开始场景-排行榜数据逻辑
12.1 知识点
明确排行榜数据信息要完成的需求
排行榜数据信息应包含玩家名称、分数和时间,用于展示游戏中玩家的成绩排名。
创建排行榜单条数据类和排行榜列表
/// <summary>
/// 排行榜单条数据
/// </summary>
public class RankInfo
{
public string name;
public int score;
public float time;
//存数据的时候要有无参构造
public RankInfo()
{
}
public RankInfo(string name, int score, float time)
{
this.name = name;
this.score = score;
this.time = time;
}
}
/// <summary>
/// 排行榜列表
/// </summary>
public class RankList
{
public List<RankInfo> list;
}
在游戏数据管理类添加排行榜数据对象并在Start读取数据
//排行榜数据对象
public RankList rankData;
//私有构造函数
private GameDataMgr()
{
//初始化游戏数据
//...其他代码
//初始化 读取 排行榜数据
rankData = PlayerPrefsDataMgr.Instance.LoadData(typeof(RankList), "Rank") as RankList;
}
在排行榜面板完善刷新排行榜列表的逻辑
//更新排行榜信息函数
public void UpdatePanelInfo()
{
//处理根据排行榜数据 更新面板
//获取 GameDataMgr中的排行榜列表 用于在这里更新
//得数据
List<RankInfo> list = GameDataMgr.Instance.rankData.list;
//根据列表更新面板数据
for (int i = 0; i < list.Count; i++)
{
//名字
labName[i].content.text = list[i].name;
//分数
labScore[i].content.text = list[i].score.ToString();
//时间 存储的时间单位是s
//把秒数 转换成 时 分 秒
int time = (int)list[i].time;
labTime[i].content.text = "";
//得到 几个小时
// 8432s 60*60 = 3600
//8432 / 3600 ≈ 2时
if (time / 3600 > 0)
{
labTime[i].content.text += time / 3600 + "时";
}
//8432-7200 余 1232s
// 1232s / 60 ≈ 20分
if (time % 3600 / 60 > 0 || labTime[i].content.text != "")
{
labTime[i].content.text += time % 3600 / 60 + "分";
}
//1232s-1200 余 32秒 直接取余60即可
labTime[i].content.text += time % 60 + "秒";
}
}
在游戏数据管理类提供一个在排行榜中添加数据的方法
//提供一个在排行榜中添加数据的方法
public void AddRankInfo(string name, int score, float time)
{
//添加单条数据
rankData.list.Add(new RankInfo(name, score, time));
//排序
rankData.list.Sort((a, b) => a.time < b.time ? -1 : 1);
//排序过后 移除10条以外的数据
//从尾部往前遍历 移除每一条
for (int i = rankData.list.Count - 1; i >= 10; i--)
{
rankData.list.RemoveAt(i);
}
//存储
PlayerPrefsDataMgr.Instance.SaveData(rankData, "Rank");
}
12.2 知识点代码
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
/// <summary>
/// 排行榜单条数据
/// </summary>
public class RankInfo
{
public string name;
public int score;
public float time;
//存数据的时候要有无参构造
public RankInfo()
{
}
public RankInfo(string name, int score, float time)
{
this.name = name;
this.score = score;
this.time = time;
}
}
/// <summary>
/// 排行榜列表
/// </summary>
public class RankList
{
public List<RankInfo> list;
}
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com