いつもお世話になっております。
今回は画像や音楽データなどの外部データの読み込みについてお聞きしたいことがあります。
ゲームなどを配布する際、画像データなどの外部データも一緒に配布する必要があると
思いますが、そのままフォルダごと配布してしまったら、盗まれたり利用されてしまう可能性が
あると思います。
なので別の形で配布して読み込めるようにしたいと思っています。
DXライブラリは圧縮したデータを読み込める専用の関数があると思いますが、
私はWindowsAPIとDirectXで開発を行っています。
実行ファイルのリソースに直接取り込ませようとも思いましたが、
実行ファイルのサイズが大きくなりすぎてしまいます。
また、リソースのみのDLLを作成することも考えましたが、BMPやWAVEファイルはリソースとして
登録できても、その他のPNG形式の画像などは、私が調べる限り登録できないようでした。
一般的には外部データはどのような状態で配布し、読み込み等を行っているのでしょうか?
まずは簡単な回答でかまいません。
その回答からまた質問を広げさせていただきます。
よろしくお願い致します!
外部データ(画像、音楽等)の読み込みについて
Re:外部データ(画像、音楽等)の読み込みについて
>DLL
>その他のPNG形式の画像などは、私が調べる限り登録できないようでした
そんなことはないはずです。
普通に PNGだろうが JPGだろうがカスタムリソース扱いで登録できます。
もし仮に環境とかツールの都合でリソース扱い出来なかったとしたら
DLL側のソースコードにCの配列にして埋め込むことはできるのでなんとでもなるかと。
>一般的には外部データはどのような状態で配布し、読み込み等を行っているのでしょうか?
素のままで配布するものもありますし、リソースに登録して exeなり dll内に
埋め込んでいるものもありますけど、ゲームだとその会社や製品独自の或いはミドルウェア等が
提供しているツールを使って複数のファイルをパック(アーカイブ)していることが多いですね。
必要ならその段階で圧縮・暗号化もしています。
細かいところは違いますけど、やっていることはDXライブラリのアーカイバとほとんど同じです。
ただどういう単位でパックしているかはそれぞれです。
カテゴリ毎にまとめたり、全てを1つにまとめていたり。
>その他のPNG形式の画像などは、私が調べる限り登録できないようでした
そんなことはないはずです。
普通に PNGだろうが JPGだろうがカスタムリソース扱いで登録できます。
もし仮に環境とかツールの都合でリソース扱い出来なかったとしたら
DLL側のソースコードにCの配列にして埋め込むことはできるのでなんとでもなるかと。
>一般的には外部データはどのような状態で配布し、読み込み等を行っているのでしょうか?
素のままで配布するものもありますし、リソースに登録して exeなり dll内に
埋め込んでいるものもありますけど、ゲームだとその会社や製品独自の或いはミドルウェア等が
提供しているツールを使って複数のファイルをパック(アーカイブ)していることが多いですね。
必要ならその段階で圧縮・暗号化もしています。
細かいところは違いますけど、やっていることはDXライブラリのアーカイバとほとんど同じです。
ただどういう単位でパックしているかはそれぞれです。
カテゴリ毎にまとめたり、全てを1つにまとめていたり。
Re:外部データ(画像、音楽等)の読み込みについて
>そんなことはないはずです。
>普通に PNGだろうが JPGだろうがカスタムリソース扱いで登録できます。
>もし仮に環境とかツールの都合でリソース扱い出来なかったとしたら
>DLL側のソースコードにCの配列にして埋め込むことはできるのでなんとでもなるかと。
カスタムリソースの存在を知りませんでした。すいません。勉強します。
が、あまりリソースで埋め込むことは考えていません。
>素のままで配布するものもありますし、リソースに登録して exeなり dll内に
>埋め込んでいるものもありますけど、ゲームだとその会社や製品独自の或いはミドルウェア等が
>提供しているツールを使って複数のファイルをパック(アーカイブ)していることが多いですね。
>必要ならその段階で圧縮・暗号化もしています。
>細かいところは違いますけど、やっていることはDXライブラリのアーカイバとほとんど同じです。
>ただどういう単位でパックしているかはそれぞれです。
>カテゴリ毎にまとめたり、全てを1つにまとめていたり。
できれば、勉強のため、アーカイブで対応してみたいです。
DXライブラリはどのようにアーカイブしているのか、簡単に説明していただけますでしょうか?
>普通に PNGだろうが JPGだろうがカスタムリソース扱いで登録できます。
>もし仮に環境とかツールの都合でリソース扱い出来なかったとしたら
>DLL側のソースコードにCの配列にして埋め込むことはできるのでなんとでもなるかと。
カスタムリソースの存在を知りませんでした。すいません。勉強します。
が、あまりリソースで埋め込むことは考えていません。
>素のままで配布するものもありますし、リソースに登録して exeなり dll内に
>埋め込んでいるものもありますけど、ゲームだとその会社や製品独自の或いはミドルウェア等が
>提供しているツールを使って複数のファイルをパック(アーカイブ)していることが多いですね。
>必要ならその段階で圧縮・暗号化もしています。
>細かいところは違いますけど、やっていることはDXライブラリのアーカイバとほとんど同じです。
>ただどういう単位でパックしているかはそれぞれです。
>カテゴリ毎にまとめたり、全てを1つにまとめていたり。
できれば、勉強のため、アーカイブで対応してみたいです。
DXライブラリはどのようにアーカイブしているのか、簡単に説明していただけますでしょうか?
Re:外部データ(画像、音楽等)の読み込みについて
>DXライブラリはどのようにアーカイブしているのか、簡単に説明していただけますでしょうか?
下記のURLより、DXライブラリをダウンロードし、
http://homepage2.nifty.com/natupaji/DxLib/dxdload.html
Tool/DXArchive/Sourceの中にDXアーカイブの
DxaEncode.exe や DxaDecode.exe のプログラムソースが入っています。
参考にしてみてはいかがでしょうか。
下記のURLより、DXライブラリをダウンロードし、
http://homepage2.nifty.com/natupaji/DxLib/dxdload.html
Tool/DXArchive/Sourceの中にDXアーカイブの
DxaEncode.exe や DxaDecode.exe のプログラムソースが入っています。
参考にしてみてはいかがでしょうか。
Re:外部データ(画像、音楽等)の読み込みについて
すいません。色々調べてたんですが、
アーカイブの作り方って、fopen等で読み込んだデータを
他の一つのファイルにfwriteで書きだすっていうイメージでいいでしょうか?
後から読み出しやすくするために、書き込むときに目印等を付けておく必要がありそうですけど。
アーカイブの作り方って、fopen等で読み込んだデータを
他の一つのファイルにfwriteで書きだすっていうイメージでいいでしょうか?
後から読み出しやすくするために、書き込むときに目印等を付けておく必要がありそうですけど。
Re:外部データ(画像、音楽等)の読み込みについて
>アーカイブの作り方って、fopen等で読み込んだデータを
>他の一つのファイルにfwriteで書きだすっていうイメージでいいでしょうか?
そんな感じです。
>後から読み出しやすくするために、書き込むときに目印等を付けておく必要がありそうですけど
そうですね。
DXArchive.hでいうと DARC_FILEHEAD構造体がそれを担当しており、このヘッダを読み取って
実データが存在する場所を探しにいきます。
>他の一つのファイルにfwriteで書きだすっていうイメージでいいでしょうか?
そんな感じです。
>後から読み出しやすくするために、書き込むときに目印等を付けておく必要がありそうですけど
そうですね。
DXArchive.hでいうと DARC_FILEHEAD構造体がそれを担当しており、このヘッダを読み取って
実データが存在する場所を探しにいきます。