Итак, проект, над которым я работаю, - это игра, основанная на вокселе, и будет иметь большие куски 3d-массива, проблема заключается в их сохранении, я не могу понять, как сохранить несколько кусков массива в один файл и загружайте требуемый фрагмент из файла при необходимости. Любые идеи относительно того, как это сделать? В идеале я могу сделать несколько меньших файлов, но это может быть неудобно.Сохранение/загрузка нескольких кусков в один файл?
0
A
ответ
0
Вы можете использовать заголовок в начале файла, чтобы сообщить программе, где глыбы расположены в файле
что-то вроде
Chunk1=256,Chunk2=512
и так далее.
или вы можете хранить куски с BinaryFormatter
using System;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;
namespace Helpr
{
class Program
{
static void Main(string[] args)
{
int[] Chunks = new int[10 * 10]; //Created this dummy chunk array to show that it works
for(int x = 0; x < 10; ++x)
{
for(int y = 0; y < 10; ++y)
{
Chunks[x + (10 * y)] = x * y; //Set the data
}
}
SaveChunks(Chunks, "Chunks.world"); //Save the chunks with a file name to refer too later
for(int i = 0; i < 100; ++i)
{
Console.WriteLine(Chunks[i] + " "); //Write the data to the console so we can compare
}
Console.WriteLine(" ");
Chunks = (int[])LoadChunks("Chunks.world"); //Load the file back into the chunk
for (int i = 0; i < 100; ++i)
{
Console.WriteLine(Chunks[i] + " "); //Log to see if it has worked
}
Console.ReadKey(); //Pause so you can even read it!
}
public static void SaveChunks(object Chunks, string filePath)
{
BinaryFormatter bf = new BinaryFormatter(); //Create a BinaryFormatter to change the chunks into a binary string
FileStream fs = new FileStream(filePath, FileMode.Create); //Create a filestream to create a new file to store the string
try
{
bf.Serialize(fs, Chunks); //Serialize the data into a file
}
catch (Exception e) //if an error occurs Post it!
{
Console.WriteLine("Failed to create Chunk file! " + e);
}
finally
{
fs.Close(); //Then close the filestream to prevent memory leaks
}
}
public static object LoadChunks(string filePath)
{
BinaryFormatter bf = new BinaryFormatter(); //Create a BinaryFormatter to convert the binary string to an object
FileStream fs = new FileStream(filePath, FileMode.Open); //Create a filestream to create a new file to provide the string
try
{
return bf.Deserialize(fs); //Deserialize the data into an object
}
catch (Exception e) //Catch any errors if they occur
{
Console.WriteLine("Chunk load failed! " + e);
return null;
}
finally
{
fs.Close(); //Then close the filestream to prevent memory leaks
}
}
}
}
Ключевой загрузкой и сохранение деталей здесь
public static void SaveChunks(object Chunks, string filePath)
{
BinaryFormatter bf = new BinaryFormatter(); //Create a BinaryFormatter to change the chunks into a binary string
FileStream fs = new FileStream(filePath, FileMode.Create); //Create a filestream to create a new file to store the string
try
{
bf.Serialize(fs, Chunks); //Serialize the data into a file
}
catch (Exception e) //if an error occurs Post it!
{
Console.WriteLine("Failed to create Chunk file! " + e);
}
finally
{
fs.Close(); //Then close the filestream to prevent memory leaks
}
}
public static object LoadChunks(string filePath)
{
BinaryFormatter bf = new BinaryFormatter(); //Create a BinaryFormatter to convert the binary string to an object
FileStream fs = new FileStream(filePath, FileMode.Open); //Create a filestream to create a new file to provide the string
try
{
return bf.Deserialize(fs); //Deserialize the data into an object
}
catch (Exception e) //Catch any errors if they occur
{
Console.WriteLine("Chunk load failed! " + e);
return null;
}
finally
{
fs.Close(); //Then close the filestream to prevent memory leaks
}
}
Надеется, что это помогает!
Смежные вопросы
- 1. Данные: Один большой, или куча мелких кусков?
- 2. Алгоритм унификации смежных кусков в коллекции кусков
- 3. Как искать диапазон для нескольких кусков текста
- 4. Использование кусков в PNG
- 5. Препроцессор нескольких файлов в один файл
- 6. Logback - протоколирование нескольких уровней в один файл
- 7. Объединение нескольких активов в один файл
- 8. Объединение нескольких изображений в один файл
- 9. C#: сохранение нескольких изображений в один файл
- 10. Перенаправление нескольких stdouts в один файл
- 11. Слияние нескольких PHP-скриптов в один файл
- 12. Сортировка нескольких файлов в один файл
- 13. Объединение нескольких байт [] массивов в один файл
- 14. Ввод нескольких команд в один пакетный файл
- 15. RoR - Объединение нескольких активов в один файл
- 16. Объединение нескольких CSS страниц в один файл
- 17. Сериализация нескольких объектов в один двоичный файл
- 18. Объединение нескольких файлов в один файл tar
- 19. Включение нескольких списков в один текстовый файл
- 20. резки трапецию (или любой другой) в нескольких кусков одинакового размера
- 21. PNG: В чем преимущество использования нескольких IDAT-кусков?
- 22. добавления нескольких текстовых файлов в один файл и переименовать файл
- 23. MySQL: retrive большого выбора кусков
- 24. Градиент для кусков в QProgressBar
- 25. Объединить байты - записать файл в папку FTP в виде кусков
- 26. Как создать единый звуковой файл из нескольких кусков звуков в Android
- 27. GTM - Один файл для нескольких контейнеров
- 28. Один файл конфигурации для нескольких сред
- 29. Загрузить один файл с использованием нескольких потоков
- 30. Один файл requirejs.config для нескольких проектов
Но BinaryFormatter делает размер файла larrrrrge – Sid