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

时间:2011-07-13 18:15:08

标签: java storage

我正在创建一个基本的2D游戏(以及游戏引擎),我目前正在为我的数据开发文件格式。当然,对于这个游戏来说,我需要缓存。我发现将游戏的所有数据保留在一个文件中并不是非常不专业(不一定,只要文件是某种缓存格式)。

这就是我来这里问的原因。我正在考虑做一个zip文件,但我觉得这根本不是最好的方式。我还在考虑做另一个二进制写入器,它将具有标题(文件类型,“位置”)和每个文件的封闭标记,因此很容易解释。但我觉得这样效率太低了。

那么请你有什么想法吗?

注意:此游戏引擎仅用于学习目的。

tl; dr我需要一种有效的方法来保存我正在制作的游戏中的图像等数据。

3 个答案:

答案 0 :(得分:7)

您可以将任何对象存储为.dat file

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(); 
        } 
    } 
}

答案 1 :(得分:2)

我认为zip不是错误的方式。这是一个相当不错的方式。把所有东西放在一个jar文件中。您甚至可以使用类加载器加载它。

答案 2 :(得分:1)

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

但如果您的部分学习练习与此主题相关,请参阅以下建议:

首先,远离任何格式,如ZIP,删除,更新,添加,跳跃都会受到重罚。即使使用JAR的索引文件,除了压缩之外,它们也很差。

因此,您可以阅读文件系统。基本上,您正在编写一个文件系统,其中'disk'只是一个二进制文件。这应该为您提供分配表等的高级概念。为了实现这样的设计,您需要对底层文件的读/写访问权限;看看java.io.RandomAccessFile

最后,如果您愿意使用Java7,则可以使用新的filesystem SPIs