C++で音げーを作っていてわからないことがあったので質問します。
キーボードを押したときに効果音を出すためにwhileループの中で監視させる文を書きます。
でも、ループ文なので連打音になってします。回避する方法はありますか?
音を出すために使っている宣言はPlaySoundMem(*******,DX_PLAYTYPE_BACK)です。
while (ScreenFlip() == 0 && ProcessMessage() == 0){
if(CheckHitKey(KEY_INPUT_S) == 1)
{
PlaySoundMem(sound_1,DX_PLAYTYPE_BACK); //連打音になってしまう。
}
}
この文に何とか書き加えて一回ボタンを押したら一回だけ音がなるプログラムが作りたいです。
よろしくお願いします<m(__)m>
C++音げー制作にあたって
Re: C++音げー制作にあたって
キーが離されたら音を鳴らすようにすれば、とりあえず早く確認できると思います。
また、ちょっと工夫がいりますが、キーが押されたら音を鳴らして、
離されていないなら、次の音を鳴らさないようにすればいいのではないでしょうか。
また、ちょっと工夫がいりますが、キーが押されたら音を鳴らして、
離されていないなら、次の音を鳴らさないようにすればいいのではないでしょうか。
Re: C++音げー制作にあたって
それならキーが押された瞬間にフラグを立てる代わりに音を鳴らせばいいと思います。3D_3D さんが書きました:キーが押された瞬間にフラグを立てて、フラグがたっていれば音を鳴らすような処理にすればよいと思います。
むしろ、擬似コードで書くと とするといいと思います。(これは一例です)
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)
Re: C++音げー制作にあたって
音ゲーで「離れたら鳴らす」ってのはちょっと不相応な気がします。3D_3DさんやみけCATさんのやり方がいいと思われます。cattail さんが書きました:キーが離されたら音を鳴らすようにすれば、とりあえず早く確認できると思います。
オフトピック
参考までに。
これは龍神録の応用ですが、こっちの方が、操作に必要なボタンを追加するときに実装しやすいように思えます。
①キーが押されてたら、対応している変数のカウンタ(時間)を増やす。そうでないなら、0に戻す。
②時間が「1」なら、音を鳴らす。
コードを描くのは面倒なので、この程度にしておきますね)ぉ
これは龍神録の応用ですが、こっちの方が、操作に必要なボタンを追加するときに実装しやすいように思えます。
①キーが押されてたら、対応している変数のカウンタ(時間)を増やす。そうでないなら、0に戻す。
②時間が「1」なら、音を鳴らす。
コードを描くのは面倒なので、この程度にしておきますね)ぉ
ほら、来いよ!! 誤字や矛盾を指摘したい奴から、前に出てこいよぉおおおおおおおッ!!!
※都合により、不定期でしか現れません。即返などはできませんのでご了承ください※
※都合により、不定期でしか現れません。即返などはできませんのでご了承ください※
Re: C++音げー制作にあたって
離されたときは、やはりだめですよね。ごめんなさい。
プログラムが正常に動くのを確かめるということでは、
作り手さんがまず安心できると思ったものですから。
if(CheckHitKey(KEY_INPUT_S) == 1 && soundnow == 0)
{
PlaySoundMem(sound_1,DX_PLAYTYPE_BACK);
soundnow = 1;
}
とすれば一回だけは正常になりますよね。
PlaySoundで鳴り終っている事がcallbackかなんかで確認できるのでしたら、
そこで、
soundnow = 0;
とすればいいのかな。
それでも音が重複して鳴らせるようになっているのなら、これは必要ないですね。
連打音になってしまう、ということですので、
今のプログラムが1音(1チャンネル)だけしか鳴らせない仕様なら、
離されるまで鳴らしてあげれば、それっぽくなるのでは?
音ゲーというより、オルガンみたいな感じで。
プログラムが正常に動くのを確かめるということでは、
作り手さんがまず安心できると思ったものですから。
if(CheckHitKey(KEY_INPUT_S) == 1 && soundnow == 0)
{
PlaySoundMem(sound_1,DX_PLAYTYPE_BACK);
soundnow = 1;
}
とすれば一回だけは正常になりますよね。
PlaySoundで鳴り終っている事がcallbackかなんかで確認できるのでしたら、
そこで、
soundnow = 0;
とすればいいのかな。
それでも音が重複して鳴らせるようになっているのなら、これは必要ないですね。
連打音になってしまう、ということですので、
今のプログラムが1音(1チャンネル)だけしか鳴らせない仕様なら、
離されるまで鳴らしてあげれば、それっぽくなるのでは?
音ゲーというより、オルガンみたいな感じで。
Re: C++音げー制作にあたって
ミケCATさんのプログラムでやってみましたが、やはり連打音になってしまいました。
私のプログラムが間違っていると思うので、たとえばどのように組めばよいでしょうか。
私のプログラムが間違っていると思うので、たとえばどのように組めばよいでしょうか。
Re: C++音げー制作にあたって
オフトピック
>たとえばどのように組めばよいでしょうか
それが既に疑似コードで提示されているのだと思うのですが?
それが既に疑似コードで提示されているのだと思うのですが?
Re: C++音げー制作にあたって
まずそのプログラムを貼っていただけた方が答えやすいと思います。izayoi_18 さんが書きました:ミケCATさんのプログラムでやってみましたが、やはり連打音になってしまいました。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)
Re: C++音げー制作にあたって
よく見て間違いを探して直したらできました!
みけCATさん、その他みなさんありがとうございました。
みけCATさん、その他みなさんありがとうございました。