かげろうです。はじめて質問させていただきます。
OSはWindowsXP、DXライブラリを使用しています。コンパイラはBorlandC++です。
プログラミング暦は2年半くらいの初心者です。
今回DXライブラリで制作したゲームを配布する際に、画像や音声のデータをまとめたsozaiフォルダがユーザーに開けてしまえないように、いつものようにDXライブラリ付属のアーカイブであるDxaEncode.exeを使用してdxaファイルに変換したのですが、その後ゲームを起動すると、画像や音声を読み込んでくれなくなりました。
ちなみに、変換の際に何かファイルが破壊されたのかと思ってDxaDecode.exeで元に戻してみるとちゃんと起動しました。
同様に変換したもうひとつのゲームでは通常に起動できたので、中身のデータかプログラムに問題があるのかもしれないのですが、一応販売する予定のゲームなのでデータやソースコードを晒したくはありません。
Logを見ると、
「グラフィックファイル sozai/~~がありません」
「右記のグラフィックファイルのロードに失敗しました:sozai/~~」
「右記のファイルのオープンに失敗しました:sozai/~~」
「右記の音声ファイルのロードに失敗しました_1:sozai/~~」
などの表示が並んでいます。
データの拡張子は、画像はすべてpng、音声はすべてmp3です。
暗号化や圧縮についての知識が皆無なので、
1.変換前には読み込むものが、dxaファイルに変換したら読み込まないということがありえるのか
2.何が原因で、どうすれば解決できるのか
を知りたいです。
よろしくお願いします。
dxaファイルが読み込めない
Re:dxaファイルが読み込めない
DxaEncoderは圧縮を行わずにファイルにまとめるだけのソフトのようですので、中に入っているファイルが壊れることは無いと思います。
なので可能性その1
名前が間違っているのではないかと思うのですが、sozaiで合っていますか?Sozai等ではありませんか?sozai.dxa/~とdxaまで含めてはいませんか?
可能性その2
exeファイルを動かしていませんか?パス指定はちゃんとexeファイルを中心にした場所になっていますか?
exeと同じフォルダなら"./sozai/~~" 、 一つ上なら"../sozai/~~"となっていますか?
販売予定とのことでソースを全て上げることは出来ないと思いますが、出来ればグラフィックハンドルを取得しているところだけでも上げて頂ければ何か分かるかもしれません。
なので可能性その1
名前が間違っているのではないかと思うのですが、sozaiで合っていますか?Sozai等ではありませんか?sozai.dxa/~とdxaまで含めてはいませんか?
可能性その2
exeファイルを動かしていませんか?パス指定はちゃんとexeファイルを中心にした場所になっていますか?
exeと同じフォルダなら"./sozai/~~" 、 一つ上なら"../sozai/~~"となっていますか?
販売予定とのことでソースを全て上げることは出来ないと思いますが、出来ればグラフィックハンドルを取得しているところだけでも上げて頂ければ何か分かるかもしれません。
Re:dxaファイルが読み込めない
早速の返信ありがとうございます。
ご指摘いただいた件ですが、起動することができた変換前の状態と比べて、sozaiフォルダの場所も名前も変えていませんので、いずれの指摘も当てはまらないと思います。
グラフィックハンドルを取得している箇所のソースコードはこんな感じです。
int image,magic,press,majo[16],majok[16];
int music,sound_magic,sound_push,sound_select;
image = LoadGraph( "sozai/picture/box.png" ) ; //箱の画像を変数に保存
magic = LoadGraph( "sozai/picture/magic.png" ) ; //魔方陣の画像を変数に保存
press = LoadGraph( "sozai/picture/press.png" ) ; //説明の画像を変数に保存
LoadDivGraph( "sozai/picture/majo.png" , 16 , 4 , 4, 50 , 50 , majo ) ;//魔女の画像を分割して配列に保存
LoadDivGraph( "sozai/picture/majo_kime.png" , 16 , 4 , 4, 50 , 50 , majok ) ;//魔女の画像を分割して配列に保存
SetCreateSoundDataType(DX_SOUNDDATATYPE_FILE);//ストリーム再生に
music = LoadSoundMem( "sozai/music/title.mp3" );
SetCreateSoundDataType(DX_SOUNDDATATYPE_MEMNOPRESS);//デフォルト再生に
sound_magic = LoadSoundMem( "sozai/music/magic.mp3" );
sound_push = LoadSoundMem( "sozai/music/kettei.mp3" );
sound_select = LoadSoundMem( "sozai/music/select.mp3" );
言い忘れていましたが、DXライブラリは最新の3.04bです。
よろしくお願いします。
一応、sozai.dxaがexeファイルと同じ位置にあることの証明として画像を添付しました。
ご指摘いただいた件ですが、起動することができた変換前の状態と比べて、sozaiフォルダの場所も名前も変えていませんので、いずれの指摘も当てはまらないと思います。
グラフィックハンドルを取得している箇所のソースコードはこんな感じです。
int image,magic,press,majo[16],majok[16];
int music,sound_magic,sound_push,sound_select;
image = LoadGraph( "sozai/picture/box.png" ) ; //箱の画像を変数に保存
magic = LoadGraph( "sozai/picture/magic.png" ) ; //魔方陣の画像を変数に保存
press = LoadGraph( "sozai/picture/press.png" ) ; //説明の画像を変数に保存
LoadDivGraph( "sozai/picture/majo.png" , 16 , 4 , 4, 50 , 50 , majo ) ;//魔女の画像を分割して配列に保存
LoadDivGraph( "sozai/picture/majo_kime.png" , 16 , 4 , 4, 50 , 50 , majok ) ;//魔女の画像を分割して配列に保存
SetCreateSoundDataType(DX_SOUNDDATATYPE_FILE);//ストリーム再生に
music = LoadSoundMem( "sozai/music/title.mp3" );
SetCreateSoundDataType(DX_SOUNDDATATYPE_MEMNOPRESS);//デフォルト再生に
sound_magic = LoadSoundMem( "sozai/music/magic.mp3" );
sound_push = LoadSoundMem( "sozai/music/kettei.mp3" );
sound_select = LoadSoundMem( "sozai/music/select.mp3" );
言い忘れていましたが、DXライブラリは最新の3.04bです。
よろしくお願いします。
一応、sozai.dxaがexeファイルと同じ位置にあることの証明として画像を添付しました。
Re:dxaファイルが読み込めない
アーカイブファイルを作った時に鍵文字列を指定しましたか?指定したならば
int SetDXArchiveKeyString(char *KeyString);
という関数を呼び、引数として鍵文字列を指定してやらなければいけません。
int SetDXArchiveKeyString(char *KeyString);
という関数を呼び、引数として鍵文字列を指定してやらなければいけません。

Re:dxaファイルが読み込めない
返信ありがとうございます。
鍵文字列という言葉すら初めて聞いたので、おそらく何も設定していないと思います。それはどのように設定するものですか?
アーカイブファイルを作った方法は、sozaiフォルダをDxaEncode.exeにドラッグしただけです。
鍵文字列という言葉すら初めて聞いたので、おそらく何も設定していないと思います。それはどのように設定するものですか?
アーカイブファイルを作った方法は、sozaiフォルダをDxaEncode.exeにドラッグしただけです。

Re:dxaファイルが読み込めない
自己解決しました。
DXライブラリのバージョンを新しくした際、「プログラムに追加すべきファイル」を上書きするのを忘れていたのが原因でした。
いろいろ考えてくださった皆様には、本当に申し訳ありませんでした。
DXライブラリのバージョンを新しくした際、「プログラムに追加すべきファイル」を上書きするのを忘れていたのが原因でした。
いろいろ考えてくださった皆様には、本当に申し訳ありませんでした。