トップページ > 過去ログ > 記事閲覧
DXアーカイブのアクセスで
名前:ryu 日時: 2011/05/24 20:59

フォルダの中にはpng,wavが二つあり そのままフォルダをDxaEncode.exeに いれアーカイブ化し プログラムからアクセスするとpngだけ表示 されます。(しかし片方のみ) アーカイブにしないままだと音が二つなり 絵が表示されます。 使用したアーカイブtoolのバージョンは Version 1.02 DXライブラリは Ver 3.05になります 使用した音ファイルとdxaをアップローダにあげてみました tp://WWW5.puny.jp/uploader/download/1306237579.rar pass 1111 #include "DxLib.h" struct SE { int handle; char name[MAX_PATH]; }; struct SEList { int index[255]; SE Apart[255]; }SEFile; void Directory(char path[],SE*,int*); int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { int SHandle,SHandle2; ChangeWindowMode( TRUE ); SetUseBackBufferTransColorFlag( TRUE ); if ( DxLib_Init( ) == -1 ) return -1; SetUseDXArchiveFlag(true); int gh = LoadGraph( "data/1AlphaCircle.png" ); int sh = LoadSoftImage( "data/1AlphaCircle.png "); SetDrawValidAlphaChannelGraphCreateFlag( TRUE ); int bgh = MakeScreen( 256, 256 ); // α付のバッファを作成 SetDrawValidAlphaChannelGraphCreateFlag( FALSE ); int bsh = MakeARGB8ColorSoftImage( 640, 480 ); int csh = MakeARGB8ColorSoftImage( 256, 256 ); int index=0; Directory("data/*.*",SEFile.Apart,&index); MyOutputDebugString("読み込んだ数=%d です\n",index); MyOutputDebugString("再生するファイル名=%s です\n",SEFile.Apart[0].name); SHandle = LoadSoundMem(SEFile.Apart[0].name); SHandle2 = LoadSoundMem("data/2test.wav") ; // 読みこんだ音をバックグラウンド再生します(『PlaySoundMem』関数使用) PlaySoundMem( SHandle , DX_PLAYTYPE_NORMAL ) ; PlaySoundMem( SHandle2 , DX_PLAYTYPE_NORMAL ) ; SetTransColor( 0, 255, 0 ); SetDrawScreen( bgh ); FillGraph( bgh, 0, 0, 0, 0 ); // BlendParam と画像のα値が乗算されますので、255を指定すれば // 画像のα値がそのまま描画先に書き込まれます SetDrawBlendMode( DX_BLENDMODE_SRCCOLOR, 255 ) ; DrawGraph( 0, 0, gh, TRUE ); // α付のバッファにレンダリング // ブレンドモードを元に戻す SetDrawBlendMode( DX_BLENDMODE_NOBLEND, 0 ) ; GetDrawScreenSoftImage( 0, 0, 256, 256, csh ); // レンダリング結果をソフトイメージに取得 FillSoftImage( bsh, 0, 0, 0, 0 ) ; BltSoftImage( 0, 0, 256, 256, sh, 0, 0, bsh ); // ソフトイメージに読み込んだ画像を直接出力 BltSoftImage( 0, 0, 256, 256, csh, 0, 240, bsh ); // バッファを使って加工した画像を出力 UpdateLayerdWindowForSoftImage( bsh ); WaitKey( ); DxLib_End( ); return 0; } void Directory(char path[],SE *SEFile,int *index) { char subpath[_MAX_PATH]; char temp[_MAX_PATH]; WIN32_FIND_DATA fd; strcpy(temp,path); /* 最初のファイル検索 */ HANDLE hFind = FindFirstFile(temp, &fd); int White = GetColor( 255 , 255 , 255 ) ; // 白色の値を取得 /* 検索失敗? */ if(hFind == INVALID_HANDLE_VALUE) { DrawString( 0, 0, "検索失敗" , White); return; /******** エラー終了 ********/ } temp[strlen(temp)-3]='\0';//*を消している do { if((fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) //フォルダかどうか判定 && strcmp(fd.cFileName,"..")!=0 && strcmp(fd.cFileName,".")!=0) { //subpathでディレクトリのフルパスが分かる wsprintf(subpath,"%s%s/*.*",temp,fd.cFileName); //フォルダの名前をパスに追加 Directory(subpath,SEFile,index); //次の検索へ } if((fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)!=FILE_ATTRIBUTE_DIRECTORY) //ファイルだったら { wsprintf(SEFile[*index].name,"%s%s",temp,fd.cFileName);//ファイル名を保存 *index+=1; } } while(FindNextFile(hFind, &fd)); /* 検索終了 */ FindClose(hFind); } #pragma endregion

Page: 1 |

Re: DXアーカイブのアクセスで ( No.1 )
名前:いっち 日時:2011/05/24 22:53

詳しく見たわけではありませんが、WIN32API の FindFirstFile ではDXアーカイブの中を検索できません。 DXライブラリの FileRead_findFirst あたりを使うとうまくいくのではないでしょうか?
Re: DXアーカイブのアクセスで ( No.2 )
名前:ryu(解決 日時:2011/05/25 13:46

なるほど、アーカイブにアクセスするには DXのファイル関数が必要だったのですね うまくいきました、ありがとうございます。
Re: DXアーカイブのアクセスで ( No.3 )
名前:ryu 日時:2011/05/27 01:09

すいません、似たような内容で詰まってしまったので このスレッドでもう一度投稿させてください。 質問: DXアーカイブにしたファイルに別々のexeファイルから参照すると後から参照するexeがはじかれてエラーに なります。 とくに書き込みはしてないはずなのですが 喧嘩しないようにする方法はどうすればよいでしょうか?
Re: DXアーカイブのアクセスで ( No.4 )
名前:ryu(解決 日時:2011/05/28 17:29

やはり目に付きにくそうなので こちらは解決で閉鎖します。

Page: 1 |