7.排行榜界面数据
7.1 知识点
分析排行榜要用到的数据。一个有个排行榜数据列表存储多个单条排行榜item。
创建排行榜数据类脚本,并且创建排行榜单条数据类。排行榜数据类有一个排行榜单条数据类的列表用于存储多条排行榜数据。排行榜单条数据类定义名字和通关时间变量,并添加XmlAttribute特性,表示在序列化时将其作为XML属性进行序列化(用属性比用很多尖括号更方便)。
/// <summary>
/// 排行榜数据
/// </summary>
public class RankData
{
//定义一个公共字段rankList,用于存储多条排行榜数据
public List<RankInfo> rankList = new List<RankInfo>();
}
/// <summary>
/// 排行榜单条数据
/// </summary>
public class RankInfo
{
//定义一个公共字段name,用于存储玩家名称,并添加XmlAttribute特性,表示在序列化时将其作为XML属性进行序列化
[XmlAttribute]
public string name;
//定义一个公共字段time,用于存储玩家成绩,并添加XmlAttribute特性,表示在序列化时将其作为XML属性进行序列化
[XmlAttribute]
public int time;
}
在游戏数据管理类脚本中关联一个排行榜数据类。游戏数据管理类构造函数初始化时用XML数据管理器读取排行榜数据。封装一个暴露给外部使用的添加排行榜数据方法,外部传入玩家名和事件,方法内创建单条玩家数据类添加到排行榜单条数据类的列表中并排序,移除大于20条的内容,用XML数据管理器添加完保存排行榜数据。
//该类是游戏数据管理器
public class GameDataMgr
{
//使用单例模式,获取GameDataMgr的实例
private static GameDataMgr instance = new GameDataMgr();
public static GameDataMgr Instance => instance;
//排行榜数据
public RankData rankData;
//GameDataMgr类的构造函数,用于初始化音乐和排行榜数据
private GameDataMgr()
{
//一开始就读取本地的排行榜数据
rankData = XmlDataMgr.Instance.LoadData(typeof(RankData), "RankData") as RankData;
}
#region 排行榜相关
/// <summary>
/// 添加排行榜数据
/// </summary>
/// <param name="name">玩家名</param>
/// <param name="time">通关时间</param>
public void AddRankData(string name, int time)
{
//单条数据
RankInfo rankInfo = new RankInfo();
rankInfo.name = name;
rankInfo.time = time;
rankData.rankList.Add(rankInfo);
//排序
rankData.rankList.Sort((a, b) => {
if (a.time > b.time) return -1;
return 1;
});
//移除大于20条的内容
if (rankData.rankList.Count > 20)
rankData.rankList.RemoveAt(20);
//保存数据
XmlDataMgr.Instance.SaveData(rankData, "RankData");
}
#endregion
}
7.2 知识点代码
RankData
using System.Collections;
using System.Collections.Generic;
using System.Xml.Serialization;
using UnityEngine;
/// <summary>
/// 排行榜数据
/// </summary>
public class RankData
{
//定义一个公共字段rankList,用于存储多条排行榜数据
public List<RankInfo> rankList = new List<RankInfo>();
}
/// <summary>
/// 排行榜单条数据
/// </summary>
public class RankInfo
{
//定义一个公共字段name,用于存储玩家名称,并添加XmlAttribute特性,表示在序列化时将其作为XML属性进行序列化
[XmlAttribute]
public string name;
//定义一个公共字段time,用于存储玩家成绩,并添加XmlAttribute特性,表示在序列化时将其作为XML属性进行序列化
[XmlAttribute]
public int time;
}
GameDataMgr
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
//该类是游戏数据管理器
public class GameDataMgr
{
//使用单例模式,获取GameDataMgr的实例
private static GameDataMgr instance = new GameDataMgr();
public static GameDataMgr Instance => instance;
//音乐相关数据
public MusicData musicData;
//排行榜数据
public RankData rankData;
//GameDataMgr类的构造函数,用于初始化音乐和排行榜数据
private GameDataMgr()
{
//就是获取本地硬盘中存储的音乐数据
musicData = XmlDataMgr.Instance.LoadData(typeof(MusicData), "MusicData") as MusicData;
//一开始就读取本地的排行榜数据
rankData = XmlDataMgr.Instance.LoadData(typeof(RankData), "RankData") as RankData;
}
#region 音乐音效相关
//保存音乐相关数据的方法
public void SaveMusicData()
{
XmlDataMgr.Instance.SaveData(musicData, "MusicData");
}
//开关背景音乐的方法
public void SetMusicIsOpen(bool isOpen)
{
//改变数据
musicData.musicIsOpen = isOpen;
//真正改变背景音乐的开关
BKMusic.Instance.SetBKMusicIsOpen(isOpen);
}
//开关音效的方法
public void SetSoundIsOpen(bool isOpen)
{
//改变数据
musicData.SoundIsOpen = isOpen;
//真正改变音效的开关
}
//设置背景音乐的音效 0~1
public void SetMusicValue(float value)
{
//改变数据
musicData.musicValue = value;
//真正的改变背景音乐的大小
BKMusic.Instance.SetBKMusicValue(value);
}
//设置音效的音效 0~1
public void SetSoundValue(float value)
{
//改变数据
musicData.soundValue = value;
}
#endregion
#region 排行榜相关
/// <summary>
/// 添加排行榜数据
/// </summary>
/// <param name="name">玩家名</param>
/// <param name="time">通关时间</param>
public void AddRankData(string name, int time)
{
//单条数据
RankInfo rankInfo = new RankInfo();
rankInfo.name = name;
rankInfo.time = time;
rankData.rankList.Add(rankInfo);
//排序
rankData.rankList.Sort((a, b) => {
if (a.time > b.time) return -1;
return 1;
});
//移除大于20条的内容
if (rankData.rankList.Count > 20)
rankData.rankList.RemoveAt(20);
//保存数据
XmlDataMgr.Instance.SaveData(rankData, "RankData");
}
#endregion
}
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com