2016-07-17 34 views
0

所以我正在开发的一个项目是基于体素的游戏,并且会有大的3d数组块,问题在于保存它们,我似乎无法弄清楚如何将一个数组的多个块保存到一个文件中,只在需要时从文件加载所需的块。有关如何去做这件事的任何想法?理想情况下,我可以制作多个较小的文件,但这可能很不方便。保存/加载多个块到一个文件?

回答

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 
      } 
     } 

希望这有助于!

+0

但BinaryFormatter确实使文件大小 – Sid

相关问题