フォルダの中には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