Лучший способ хранить данные для вашей игры?(Изображения, карты и тому подобное) - PullRequest
5 голосов
/ 13 июля 2011

Я создаю основную 2D-игру (хорошо игровой движок), и в настоящее время я разрабатываю форматы файлов для моих данных. Конечно, для запуска этой игры мне понадобится кеш. Я считаю совершенно непрофессиональным оставлять все данные для игры не в одном файле (ну, не обязательно, если файлы находятся в каком-то формате кэша).

Так вот почему я пришел сюда, чтобы спросить. Я думал о создании почтового файла, но я чувствую, что это не лучший способ вообще. Я также думал о создании другого бинарного редактора, у которого будут заголовки (тип файла, «местоположение») и тег для каждого из файлов, чтобы его было легко интерпретировать. Но я чувствовал, что это было слишком неэффективно.

Так, пожалуйста, у вас есть идеи?

Примечание: этот игровой движок действительно предназначен только для обучения.

tl; dr Мне нужен эффективный способ хранения данных, например изображений, для моей игры, которую я создаю.

Ответы [ 3 ]

7 голосов
/ 13 июля 2011

Вы можете сохранить любой объект как .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(); 
        } 
    } 
}
2 голосов
/ 13 июля 2011

Я не думаю, что почтовый индекс - неправильный путь.Это довольно хороший способ.Просто поместите все в jar-файл.Вы даже сможете использовать загрузчик классов для его загрузки.

1 голос
/ 13 июля 2011

По прагматическим причинам я бы рекомендовал использовать несколько файлов, но помещать их все в подкаталог в temp.

Но если часть вашего учебного упражнения связана с этой темой, вот мои предложения:

Во-первых, держитесь подальше от любого формата, такого как ZIP, где существует серьезное наказание за удаление, обновление, добавление, переход.Даже с индексными файлами JAR они плохи для чего-либо, кроме сжатия.

Так что вы можете читать в файловых системах.По сути, вы пишете файловую систему, где «диск» - это просто двоичный файл.Это должно дать вам общее представление о таблицах размещения и т. Д. Чтобы реализовать такой дизайн, вам необходим доступ на чтение / запись к базовому файлу;посмотрите на java.io.RandomAccessFile

Наконец, если вы хотите использовать Java7, вы можете поиграть с новыми файловыми системами SPI .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...