在java保存游戏状态_保存游戏状态的最佳方法是什么?
但我听说这种方式有一些问题,不适合储蓄。
没错。在某些设备上,存在一些问题BinaryFormatter..当您更新或更改类时,情况会变得更糟。由于类不再匹配,您的旧设置可能会丢失。有时,由于这个原因,在读取保存的数据时会出现异常。
另外,在IOS上,您必须添加Environment.SetEnvironmentVariable("MONO_REFLECTION_SERIALIZER", "yes");否则你会有问题的BinaryFormatter.
保存的最好方法是用PlayerPrefs和Json..你可以学会怎么做这里.在我的例子中,保存格式必须是字节数组。
在本例中,您可以将其转换为json,然后转换json。string到byte阵列。然后你可以用File.WriteAllBytes和File.ReadAllBytes若要保存和读取字节数组,请执行以下操作。
下面是一个可以用来保存数据的泛型类。几乎和.一样这,这个但它确实不使用PlayerPrefs..它使用文件保存json数据。
DataSaver班级:public class DataSaver{
//Save Data
public static void saveData(T dataToSave, string dataFileName)
{
string tempPath = Path.Combine(Application.persistentDataPath, "data");
tempPath = Path.Combine(tempPath, dataFileName + ".txt");
//Convert To Json then to bytes
string jsonData = JsonUtility.ToJson(dataToSave, true);
byte[] jsonByte = Encoding.ASCII.GetBytes(jsonData);
//Create Directory if it does not exist
if (!Directory.Exists(Path.GetDirectoryName(tempPath)))
{
Directory.CreateDirectory(Path.GetDirectoryName(tempPath));
}
//Debug.Log(path);
try
{
File.WriteAllBytes(tempPath, jsonByte);
Debug.Log("Saved Data to: " + tempPath.Replace("/", "\\"));
}
catch (Exception e)
{
Debug.LogWarning("Failed To PlayerInfo Data to: " + tempPath.Replace("/", "\\"));
Debug.LogWarning("Error: " + e.Message);
}
}
//Load Data
public static T loadData(string dataFileName)
{
string tempPath = Path.Combine(Application.persistentDataPath, "data");
tempPath = Path.Combine(tempPath, dataFileName + ".txt");
//Exit if Directory or File does not exist
if (!Directory.Exists(Path.GetDirectoryName(tempPath)))
{
Debug.LogWarning("Directory does not exist");
return default(T);
}
if (!File.Exists(tempPath))
{
Debug.Log("File does not exist");
return default(T);
}
//Load saved Json
byte[] jsonByte = null;
try
{
jsonByte = File.ReadAllBytes(tempPath);
Debug.Log("Loaded Data from: " + tempPath.Replace("/", "\\"));
}
catch (Exception e)
{
Debug.LogWarning("Failed To Load Data from: " + tempPath.Replace("/", "\\"));
Debug.LogWarning("Error: " + e.Message);
}
//Convert to json string
string jsonData = Encoding.ASCII.GetString(jsonByte);
//Convert to Object
object resultValue = JsonUtility.FromJson(jsonData);
return (T)Convert.ChangeType(resultValue, typeof(T));
}
public static bool deleteData(string dataFileName)
{
bool success = false;
//Load Data
string tempPath = Path.Combine(Application.persistentDataPath, "data");
tempPath = Path.Combine(tempPath, dataFileName + ".txt");
//Exit if Directory or File does not exist
if (!Directory.Exists(Path.GetDirectoryName(tempPath)))
{
Debug.LogWarning("Directory does not exist");
return false;
}
if (!File.Exists(tempPath))
{
Debug.Log("File does not exist");
return false;
}
try
{
File.Delete(tempPath);
Debug.Log("Data deleted from: " + tempPath.Replace("/", "\\"));
success = true;
}
catch (Exception e)
{
Debug.LogWarning("Failed To Delete Data: " + e.Message);
}
return success;
}}
使用:
要保存的示例类:[Serializable]public class PlayerInfo{
public List ID = new List();
public List Amounts = new List();
public int life = 0;
public float highScore = 0;}
保存数据:PlayerInfo saveData = new PlayerInfo();saveData.life = 99;saveData.highScore = 40;
//Save data from PlayerInfo to a file named playersDataSaver.saveData(saveData, "players");
负载数据:PlayerInfo loadedData = DataSaver.loadData("players");if (loadedData == null){
return;}//Display loaded DataDebug.Log("Life: " + loadedData.life);
Debug.Log("High Score: " + loadedData.highScore);for (int i = 0; i
Debug.Log("ID: " + loadedData.ID[i]);}for (int i = 0; i
Debug.Log("Amounts: " + loadedData.Amounts[i]);}
删除数据:DataSaver.deleteData("players");
在java保存游戏状态_保存游戏状态的最佳方法是什么?相关推荐
- Java计算器按钮间隔_获得声音按钮的最佳方法按Java计算器?
我是一名学习Java的学生,正在为我的简历工作一个独立的项目.我决定做一个Java计算器,因为我知道构成它的大多数组件.我不知道怎么做的一件事是按下按钮添加声音.对于Audiostream输入内容,我 ...
- Java 丢手绢游戏 求和_大班游戏活动_丢手绢
本育儿文章是育儿天堂最新发布的<大班游戏活动_丢手绢>的详细页面,觉得有用就收藏了,这里给大家转摘到育儿天堂,看完如果觉得有用请记得收藏. 大班游戏运动:丢手绢 滨州市滨城区杨柳雪镇教诲尝 ...
- java东风破笑傲江湖游戏下载_笑傲江湖游戏
为您推荐:dos游戏 笑傲江湖(DOS)是一款经典的武侠游戏作品,游戏通过完美移植金庸小说的内容,用突出的DOS系统3D效果,为玩家重新讲述一遍经典的武侠故事,笑傲江湖(DOS)虽然游戏题材固定,游戏 ...
- 最好玩的计算机游戏排行,电脑十大耐玩单机游戏-pc上最好玩的单机游戏-pc好玩的单机游戏排行_侠游戏网...
说到端游单机游戏,最近也推出一些,不过也不多.下面就推荐我自己玩过的单机游戏给大家吧,希望你们能找到适合自己的单机游戏. 一.GTA5 这被玩家成为神作之游,游戏好玩程度非常的高,可以玩上好几年,因为 ...
- 服务器查看gpu状态_服务器 201 状态
生产环境常见的HTTP状态码列表 生产环境常见的HTTP状态码列表(List of HTTP status codes) 说明:求精不求多,有舍才有得 不一样的思维不一样的精彩. 200 - OK,服 ...
- java enum 2d array,Java-打印2D数组的最佳方法?
Java-打印2D数组的最佳方法? 我想知道打印2D阵列的最佳方法是什么. 这是我的一些代码,我只是想知道这是否是一种好习惯. 如果发现任何其他错误,请更正我在此代码中犯的任何其他错误. 谢谢! in ...
- 如何实现JAVA游戏存档_保存游戏数据 – Java
Should I be learning XML in tandem with Java? 除非您想学习XML或认为XML是您的应用程序的一个很好的选择,否则没有理由.有许多方法可以在没有XML的情况 ...
- java 贪吃蛇 控制台_控制台游戏贪吃蛇Java版
无心间看到的一个贪吃蛇的控制台小游戏,起初只是想copy下来玩玩,没想里面有不少小问题,就顺手解决,固然仍是不完美,可是也勉强能玩了.java import java.util.LinkedList; ...
- java猜拳游戏代码_猜拳游戏 - java代码库 - 云代码
[java]代码库public class Computer { String name; int score; public int showfist(){ int quan; quan=(int) ...
最新文章
- Zabbix使用JMX监控tomcat
- mysql函数快速查找
- java开启线程的方法_Java有几种方法开启线程?怎么实现带有返回值的线程?
- 国内企业应如何实施ITSM
- MFC(六)(对话框)
- 分享《组播技术白皮书》
- Mac下使用gitHub
- 声明 styleable 与声明 attr 的区别
- 160304-01、mysql数据库插入速度和读取速度的调整记录
- Android学习路(正在写)
- 【Unity游戏开发】Unity基础(一)面板介绍
- 一般线性模型混合线性模型广义线性模型【转】
- 常见的DoS攻击防御方式
- iframe是什么?iframe用法详解
- 看完淘宝技术这十年思考
- 世界名车各种图标及文字说明
- java excel checkbox_在Java窗体表格中插入复选框
- 计算机无法备份,win7不能备份系统如何解决?win7不能备份系统的解决方法
- 计算机二级vb考试怎么准备,计算机二级考试内容是什么 各科目该怎么准备
- 赤壁之战的Google Map
热门文章
- android 项目 功能 源码 eclipse的
- swith 好久不用都忘记了
- SpringMVC请求后台地址URL没有.*的几种实现方式
- 微软MCITP系列课程(十)WSUS服务器搭建
- DOMContentLoaded事件
- protoc 命令 java_用proto命令生成java文件
- 专科学院计算机专业全国排名,2019年专科专业排行_2019世界大学排名 计算机专业...
- springboot日志可视化_Springboot面试问题集锦
- 必须用Python给程序员不懂浪漫平反一波....不管班花还是校花全都跑不掉~
- 求两条轨迹间的hausdorff距离_干货 | 轨迹方程问题?两招咔嚓!