为你的游戏存储数据的最佳方式?(图像、地图等)



我正在创造一款基本的2D游戏(游戏邦注:其实是一个游戏引擎),我目前正在为我的数据开发文件格式。当然,为了让这个游戏运行,我需要缓存。我发现将游戏的所有数据放在一个单独的文件中是非常不专业的(当然也不一定,只要这些文件是某种缓存格式)。

所以这就是我来这里问的原因。我想做一个压缩文件,但我觉得这不是最好的方式。我还在考虑做另一个二进制写入器,它将有头(文件类型,"位置")和每个文件的封闭标记,这样就很容易解释。但我觉得这样效率太低了。

那么,你有什么想法吗?

注意:这个游戏引擎真的只是为了学习的目的。

我需要一种有效的方式来存储数据,例如我正在制作的游戏的图像。

您可以将任何对象存储为。dat文件:

public class MyGame implements Serializable 
{ 
    private static void saveGame(ObjectType YourObject, String filePath) throws IOException 
    { 
        ObjectOutputStream outputStream = null; 
        try 
        { 
            outputStream = new ObjectOutputStream(new FileOutputStream(filePath)); 
            outputStream.writeObject(YourObject); 
        } 
        catch(FileNotFoundException ex) 
        { 
            ex.printStackTrace(); 
        } 
        catch(IOException ex) 
        { 
            ex.printStackTrace(); 
        } 
        finally 
        { 
            try 
            { 
                if(outputStream != null) 
                { 
                    outputStream.flush(); 
                    outputStream.close(); 
                } 
            } 
            catch(IOException ex) 
            { 
                ex.printStackTrace(); 
            } 
        } 
    } 
    public static ObjectType loadGame(String filePath) throws IOException 
    { 
        try 
        { 
            FileInputStream fileIn = new FileInputStream(filePath); 
            ObjectInputStream in = new ObjectInputStream(fileIn); 
            return (ObjectType) in.readObject(); 
        } 
        catch(FileNotFoundException ex) 
        { 
            ex.printStackTrace(); 
        } 
        catch(IOException ex) 
        { 
            ex.printStackTrace(); 
        } 
    } 
}

我不认为压缩是错误的方式。这是一个相当好的方法。只需将所有内容放入jar-File。你甚至可以使用类加载器来加载它

出于实用的原因,我建议使用多个文件,但将它们全部放在temp的子目录中。

但是如果你的部分学习练习与这个主题有关,这里是我的建议:

首先,远离像ZIP这样的格式,在这种格式中,删除、更新、添加和跳转会受到严重的惩罚。即使使用JAR的索引文件,除了压缩之外,它们在其他方面也很差。

因此您可以阅读有关文件系统的信息。本质上,您正在编写一个文件系统,其中"磁盘"只是一个二进制文件。这应该会让你对分配表等有一个高层次的了解。为了实现这样的设计,你需要对底层文件进行读/写访问;查看java.io.RandomAccessFile

最后,如果您愿意使用Java7,您可以使用新的文件系统spi。

最新更新