C#2.0時代のゲームプログラミング(5)

続いて、file system。


ゲームで使う素材をbmpやらpngやら、生のファイルを配備するわけにはいかない。例えば、アダルトゲームでCGが bmp/ フォルダにbmp形式で格納されていたら、ユーザーはゲームをする気を無くすかも知れない。


そこで、ファイルは独自の圧縮形式を用いるのだが、プログラム側からはそれらのファイルに対しても透過的にアクセスできなければならない。この圧縮ファイルを解凍するものをArchiverと呼ぶことにしよう。


Archiverはfile systemに対してattachされ、以後、透過的に圧縮ファイル内のファイルにアクセスできる設計になっているのが好ましいだろう。よって、すべてのファイルの読み書きは、Archiverのattachできるfile systemを必ず経由させて実現していなければならない。 *1


たとえば、zip archiverをattachさせたfile systemでは、

FileSys.Load("cg/bmp/1.bmp");

としたときに、まず、"cg/bmp/1.bmp"を探すのだが、このファイルが存在しなければ、"cg/bmp.zip"のなかにある"1.bmp"を探す。これが無ければ、cg.zipファイルのなかにある"bmp/1.bmp"を探す。


YanesdkのFileSysは、このように、zipファイル内のファイルを透過的に扱うことも出来る。(つづく)

*1:このことは口で言うほど容易なことではない。例えば、MCIを用いたMIDIファイルの再生においては、メモリ上に読み込まれたデータを指定できない。だから、そのような場合には、一度テンポラリに書き出して、そのファイルを渡してやる必要がある。また、.NET FrameworkのBitmapクラスのようにLoadが.NET Frameworkのfile systemと癒着している場合もある。この場合、MemoryStreamにいったんコピーして、そのStreamから読み込ませる必要がある。このoverheadが馬鹿にならない。