2011-07-13 12 views
5

私は基本的な2Dゲーム(ゲームエンジン)を作成しています。私は現在、自分のデータ用のファイル形式を開発しています。もちろん、このゲームを走らせるために、キャッシュが必要です。私は、ゲームのためのすべてのデータを1つのファイルに保存しないようにするのは、かなり専門的ではないことがわかります(ファイルが何らかのキャッシュ形式になっている限りは必ずしもそうではありません)。あなたのゲームのためのデータを保存する最も良い方法は? (画像、地図など)

私がここに来て尋ねる理由です。私はzipファイルを行うことを考えていたが、それはまったく最善の方法ではないように感じる。私はまた、ヘッダー(ファイルのタイプ、 "location")とそれぞれのファイルの囲みタグを持つ別のバイナリライターをやって、解釈が容易になるように考えていました。しかし、それはあまりにも非効率的だったように感じました。

どうかありがとうございますか?

注:このゲームエンジンは実際に学習目的のためだけのものです。

tl; dr私が作っているゲームの画像などのデータを保存する効率的な方法が必要です。

+0

キャッシュにも書き込みをしたいのですか、またはすべての静的コンテンツをパッケージ化することを求めていますか? –

+0

ゲームの多くは、画像とサウンドを基本的な画像とサウンドファイルとして保存します。本当にこれをやりたければ、ゲームが終了した後に追加します。そうしないと、コードと資産をコンパイルする必要があるため、開発が遅くなります。 – thedaian

+0

@Dilum Ranatunga - 私はキャッシュにも書き込みができたい、あるいは少なくとも新しいコンテンツを追加できるようにしたい。 – Fellixombc

答えて

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

ああ、私は私の書いて、私のマップファイルを読むためにこれを使用しました。これは私が検討していたアイデアの1つですが、イメージファイルをどのように保存し管理することができますか? – Fellixombc

+0

@Fellixombcは画像をそのまま保存します(Jpg、gif、bmp、...など) –

+0

ああ、私はあなたがそれを行うことができるとは思わなかった。ありがとうございました。 – Fellixombc

2

私は郵便番号が間違った方法であるとは思いません。それはむしろ良い方法です。すべてをjarファイルに入れてください。クラスローダーを使用してロードすることさえできます。

+0

+1:JarはZipよりも良い選択です。クラスローダーからリソースを取得するためにgetResourceAsInputStream()を使用すると、コードを変更せずにjarファイル内に開発用のディレクトリを作成できます。 –

+0

JARはクラスローダーによって固定されています。したがって、このソリューションは書き込み可能なキャッシュとして失敗します。 –

+0

実際には面白そうに聞こえるし、良い学習体験になるでしょう、ありがとう! – Fellixombc

1

実用的な理由から、複数のファイルを使用することをお勧めしますが、すべてサブディレクトリtempに入れてください。ここ

しかし、あなたの学習運動の一部がこのトピックに関連している場合は、私の提案は、次のとおりです。

まず、跳躍、離れて、削除、更新、追加するための重いペナルティがあるZIPのような任意の形式、から滞在します。 JARのインデックスファイルであっても、圧縮以外のものは貧弱です。

ファイルシステムを読み上げることができます。本質的には、 'ディスク'が単なるバイナリファイルであるファイルシステムを作成しています。そのような設計を実装するためには、基礎となるファイルへの読み書きアクセスが必要です。 java.io.RandomAccessFile

最後に、Java7を使用する場合は、新しいfilesystem SPIsでプレイすることができます。

+0

ありがとうございます!私は先に進み、RandomAccess ファイルを見て、私が何ができるかを見ていきます。そして、はい、私はjavaをもう少し詳しく調べることで、やり方をする新しい方法を学ぼうとしています! – Fellixombc

関連する問題