赞
踩
在这个方案中,我希望Text组件所使用的文本,字体样式等都通过读表的形式完成,这样的话策划有啥需求就能通过修改配置表的形式实现。配置表会有两个:
StyleName | Font | FontStyle | Size | RichText | CororR | CororG | CororB | CororA |
---|---|---|---|---|---|---|---|---|
Main | Arial | Bold | 30 | True | 50 | 50 | 50 | 255 |
Battle | Arial | Normal | 40 | True | 100 | 100 | 100 | 255 |
StyleName:表示样式名称,同时用作键值
Font:表示需要使用的字体
FontStyle:表示需要使用的字体样式
Size:表示字体的大小
RichText:表示是否支持富文本
ColorRGBA:表示字体的颜色
2.文本表
Style | Language_CN | LanguageEN |
---|---|---|
Main | 中文 | 英语 |
Style:表示样式,需要和字体样式表中的StyleName对应
这里并非一定要使用bin文件,可根据需求及喜好也可以使用json等形式。为了方便,我使用了ExcelDataReader和ExcelDataReader.DataSet两个插件来读取Excel表,这两个插件可通过Nuget安装到解决方案中。
//bin文件存放路径 private const string _outputPath = "../../../Output/"; //Excel表路径 string _inputPath = string.Empty; /// <summary> /// 生成bin文件 /// </summary> /// <param name="inputPath"></param> public void CreateBinaryData(string inputPath) { if (_inputPath != inputPath) _inputPath = inputPath; var styleDatas = ReadStyle(); WriteStyle(styleDatas); ReadTextConfig(); } /// <summary> /// 从Excel表中读取多语言文本数据 /// </summary> void ReadTextConfig() { List<TextData> datas = new List<TextData>(); using (var stream = File.Open(_inputPath, FileMode.Open, FileAccess.Read)) { using (var reader = ExcelReaderFactory.CreateReader(stream)) { DataSet dataSet = reader.AsDataSet(); DataTable textTable = dataSet.Tables[(int)Sheet.TEXT_CONFIG]; for (int i = 1; i < textTable.Columns.Count; i++) { for (int j = 1; j < textTable.Rows.Count; j++) { TextData data = new TextData(); data.ID = j + 1; data.Style = textTable.Rows[j][0].ToString(); data.Content = textTable.Rows[j][i].ToString(); datas.Add(data); } //保存数据 WriteLanuage(textTable.Rows[0][i].ToString(), datas); datas.Clear(); } } } } /// <summary> /// 将读取到的多语言数据写成二进制文件 /// </summary> /// <param name="tableName"></param> /// <param name="datas"></param> void WriteLanuage(string tableName, List<TextData> datas) { using (var steam = new FileStream(_outputPath + tableName, FileMode.Create, FileAccess.Write)) { using (var writer = new BinaryWriter(steam)) { //先写人Count,读取的使用才知道需要几次才能读完全部数据 writer.Write(datas.Count); foreach (var data in datas)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。