C++音げー制作にあたって

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
izayoi_18
記事: 5
登録日時: 10年前
住所: 長野

C++音げー制作にあたって

#1

投稿記事 by izayoi_18 » 10年前

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>

Rittai_3D
記事: 525
登録日時: 12年前

Re: C++音げー制作にあたって

#2

投稿記事 by Rittai_3D » 10年前

キーが押された瞬間にフラグを立てて、フラグがたっていれば音を鳴らすような処理にすればよいと思います。
初心者です

cattail
記事: 75
登録日時: 11年前

Re: C++音げー制作にあたって

#3

投稿記事 by cattail » 10年前

キーが離されたら音を鳴らすようにすれば、とりあえず早く確認できると思います。

また、ちょっと工夫がいりますが、キーが押されたら音を鳴らして、
離されていないなら、次の音を鳴らさないようにすればいいのではないでしょうか。

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

Re: C++音げー制作にあたって

#4

投稿記事 by みけCAT » 10年前

3D_3D さんが書きました:キーが押された瞬間にフラグを立てて、フラグがたっていれば音を鳴らすような処理にすればよいと思います。
それならキーが押された瞬間にフラグを立てる代わりに音を鳴らせばいいと思います。

むしろ、擬似コードで書くと

コード:

// 初期化
フラグ = OFF;

// ループ内
if (キーが押されている) {
    if (フラグがOFF) 音を鳴らす;
    フラグ = ON;
} else {
    フラグ = OFF;
}
とするといいと思います。(これは一例です)
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

アバター
amehirune
記事: 181
登録日時: 11年前
住所: どっか
連絡を取る:

Re: C++音げー制作にあたって

#5

投稿記事 by amehirune » 10年前

cattail さんが書きました:キーが離されたら音を鳴らすようにすれば、とりあえず早く確認できると思います。
音ゲーで「離れたら鳴らす」ってのはちょっと不相応な気がします。3D_3DさんやみけCATさんのやり方がいいと思われます。
オフトピック
参考までに。
これは龍神録の応用ですが、こっちの方が、操作に必要なボタンを追加するときに実装しやすいように思えます。
①キーが押されてたら、対応している変数のカウンタ(時間)を増やす。そうでないなら、0に戻す。
②時間が「1」なら、音を鳴らす。
コードを描くのは面倒なので、この程度にしておきますね)ぉ
ほら、来いよ!! 誤字や矛盾を指摘したい奴から、前に出てこいよぉおおおおおおおッ!!!
※都合により、不定期でしか現れません。即返などはできませんのでご了承ください※

cattail
記事: 75
登録日時: 11年前

Re: C++音げー制作にあたって

#6

投稿記事 by cattail » 10年前

離されたときは、やはりだめですよね。ごめんなさい。
プログラムが正常に動くのを確かめるということでは、
作り手さんがまず安心できると思ったものですから。

if(CheckHitKey(KEY_INPUT_S) == 1 && soundnow == 0)
{
PlaySoundMem(sound_1,DX_PLAYTYPE_BACK);
soundnow = 1;
}

とすれば一回だけは正常になりますよね。
PlaySoundで鳴り終っている事がcallbackかなんかで確認できるのでしたら、
そこで、
soundnow = 0;
とすればいいのかな。
それでも音が重複して鳴らせるようになっているのなら、これは必要ないですね。
連打音になってしまう、ということですので、
今のプログラムが1音(1チャンネル)だけしか鳴らせない仕様なら、
離されるまで鳴らしてあげれば、それっぽくなるのでは?
音ゲーというより、オルガンみたいな感じで。

izayoi_18
記事: 5
登録日時: 10年前
住所: 長野

Re: C++音げー制作にあたって

#7

投稿記事 by izayoi_18 » 10年前

ミケCATさんのプログラムでやってみましたが、やはり連打音になってしまいました。
私のプログラムが間違っていると思うので、たとえばどのように組めばよいでしょうか。

アバター
usao
記事: 1889
登録日時: 12年前
連絡を取る:

Re: C++音げー制作にあたって

#8

投稿記事 by usao » 10年前

オフトピック
>たとえばどのように組めばよいでしょうか

それが既に疑似コードで提示されているのだと思うのですが?

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

Re: C++音げー制作にあたって

#9

投稿記事 by みけCAT » 10年前

izayoi_18 さんが書きました:ミケCATさんのプログラムでやってみましたが、やはり連打音になってしまいました。
まずそのプログラムを貼っていただけた方が答えやすいと思います。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

izayoi_18
記事: 5
登録日時: 10年前
住所: 長野

Re: C++音げー制作にあたって

#10

投稿記事 by izayoi_18 » 10年前

よく見て間違いを探して直したらできました!
みけCATさん、その他みなさんありがとうございました。

閉鎖

“C言語何でも質問掲示板” へ戻る