トップページ > 過去ログ > 記事閲覧
太鼓の達人のように・・・
名前:aaaaaaaaa 日時: 2012/12/17 13:43

太鼓の達人のようなリズムゲームを作っています。 一応自分で用意した音楽でうまく動作しているのですが、 PSP版の太鼓の達人のように、音楽ファイルをコードに書いて(PlaySoundFile( "gamumusic.wav")のように)指定するのではなく後から好きな音楽を追加することはできますか? とりあえず、追加の方法だけ知りたいです。

Page: 1 |

Re: 太鼓の達人のように・・・ ( No.1 )
名前:Will 日時:2012/12/17 18:18

ファイル名を変数にすれば可能です。 char SoundFile[MAX_PATH]; // 音楽ファイル名を入力してもらう、もしくはファイルから読み込む PlaySoundFile(SoundFile);
Re: 太鼓の達人のように・・・ ( No.2 )
名前:aaaaaaaaa 日時:2012/12/18 11:23

「このフォルダ内に入っている音楽を流す」といった指定は不可能でしょうか? 音楽ファイル名を入力してもらう という方法が具体的にピンときません・・・
Re: 太鼓の達人のように・・・ ( No.3 )
名前:Will 日時:2012/12/18 12:44

フォルダ内のファイル検索はWinAPIのFindFirstFileを利用すれば実現します。 ttp://msdn.microsoft.com/ja-jp/library/cc429233.aspx 使用方法はググってください。 > 音楽ファイル名を入力してもらう > という方法が具体的にピンときません・・・ 別段難しい話ではなくWinAPIのGetOpenFileNameを利用してファイル選択してもらうか(フルスクリーンの場合はダメ)、 DXLibのKeyInputSingleCharStringでファイル名を入力してもらえばよいだけのことです。
Re: 太鼓の達人のように・・・ ( No.4 )
名前:aaaaaaaaa 日時:2012/12/19 12:01

FindFirstFileを使用してみたのですがやはりうまくいきません。 ↓これが私の書いたコードです。 #include "DxLib.h" HANDLE hFind; WIN32_FIND_DATA fd; // プログラムは WinMain から始まります int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){ ChangeWindowMode(TRUE); SetGraphMode(600,800,32); SetMainWindowText("ファイル走査"); if( DxLib_Init() == -1 ) // DXライブラリ初期化処理 { return -1 ; // エラーが起きたら直ちに終了 } FindFirstFile("gamumusic\\%03d.mp3", &fd); ClearDrawScreen(); while( ProcessMessage() == 0 ){ while(1){ /* 結果の表示 */ DrawFormatString(400,200,GetColor(255,255,255),"%s",fd); while(FindNextFile(hFind, &fd)); ScreenFlip(); } FindClose(hFind); } DxLib_End() ; // DXライブラリ使用の終了処理 return 0 ; // ソフトの終了 } ↑これを実行すると 『test.exe の 0x77a76b90 でハンドルされていない例外が発生しました: 0xC0000005: 場所 0x00000020 に書き込み中にアクセス違反が発生しました。』 と表示されてしまいます。 どこがいけないのでしょうか?
Re: 太鼓の達人のように・・・ ( No.5 )
名前:Will 日時:2012/12/19 14:15

沢山間違いがあります。 1.ファイル名の指定方法 "%03d.mp3"は間違いです。 printfでは無いのでこのような指定はできません。 「windows ワイルドカード」で検索して、検索する時のファイル名の指定方法を勉強してください。 2.FindFirstFileの戻り値を受け取っていません そのため「hFind」は不定値のままです。(グローバル変数なので多分0でしょうが) 正しい値でないhFindに対してFindNextFile、FindCloseしているのでアクセス違反になります。 また、以下のようにhFindから検索結果をチェックしてください。 検索が失敗している時にはfdの中身は不定です。 /* 検索失敗? */ if(hFind == INVALID_HANDLE_VALUE) { printf("検索失敗\n"); return; /******** エラー終了 ********/ } 3.whileが多い while( ProcessMessage() == 0 ){ while(1){     ↑★このループから抜ける条件がない、その間ProcessMessage()が実行されないので正常に動作しない /* 結果の表示 */ DrawFormatString(400,200,GetColor(255,255,255),"%s",fd); while(FindNextFile(hFind, &fd));         ↑★このループは意味不明 ScreenFlip(); }     ↓★外側のwhileがあるので何回でもクローズしてしまう→アクセス違反 FindClose(hFind); }
Re: 太鼓の達人のように・・・ ( No.6 )
名前:Will 日時:2012/12/19 14:19

見落としてた。 4.DrawFormatString(400,200,GetColor(255,255,255),"%s",fd); これもアクセス違反です。 ファイル名を取り出す場合は「fd.cFileName」です。
Re: 太鼓の達人のように・・・ ( No.7 )
名前:Will 日時:2012/12/19 14:20

こちらのページのCサンプルとよく見比べてください。 ttp://nienie.com/~masapico/api_FindFirstFile.html
Re: 太鼓の達人のように・・・ ( No.8 )
名前:aaaaaaaaa 日時:2012/12/19 19:25

とりあえず、先ほどのエラーはきえました。 ただ、改行して表示されないのでついでに教えていただけますか?
Re: 太鼓の達人のように・・・ ( No.9 )
名前:Will 日時:2012/12/20 08:15

DrawFormatStringには改行機能はありません。 表示する度にY座標を文字の高さ分+すればよいだけです。
Re: 太鼓の達人のように・・・ ( No.10 )
名前:aaaaaaaaa(解決) 日時:2012/12/20 17:41

いろいろとアドバイスありがとうございました。 頑張って作ります

Page: 1 |