ページ 1 / 1
ゲーム:サウンドの時間調整
Posted: 2018年8月11日(土) 07:38
by シャドウ
コード:
#include "DxLib.h"
int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) {
ChangeWindowMode(TRUE); // ウィンドウモードに設定
DxLib_Init(); // DXライブラリ初期化処理
int Handle; // データハンドル格納用変数
Handle = LoadGraph("画像/game_back.png"); // 画像をロード
DrawGraph(0, 0, Handle, TRUE); // データハンドルを使って画像を描画
int Handle2, Count = 0;
Handle2 = LoadSoundMem("サウンド/bgm_gisau.wav"); // サウンド/1up.wavをロードし、識別番号をHandleに格納
// while(裏画面を表画面に反映, メッセージ処理, 画面クリア)
while (ScreenFlip() == 0 && ProcessMessage() == 0) {
if (Count % 120 == 0) { // 2秒に一度
PlaySoundMem(Handle2, DX_PLAYTYPE_LOOP); // 効果音を再生する
}
Count++;
}
WaitKey(); // キー入力待ち
DxLib_End(); // DXライブラリ終了処理
return 0;
}
おはようございます。
ゲームを作っているのですが、増加しているカウンタを120で割った余りが0の時鳴らせば2秒に一度成らせることになるのであのような実行結果になっています。
と意味がよく解らないのですが、サウンドが流れている時間をもっと増やすにはどうしたら良いですか?
ループしてもすぐ途切れてしまうので(時間が短すぎる)のでもっと増やしたいです。
よろしくお願いします。
Re: ゲーム:サウンドの時間調整
Posted: 2018年8月11日(土) 07:50
by よもやま
”あのような実行結果”とはなんぞや?
Re: ゲーム:サウンドの時間調整
Posted: 2018年8月11日(土) 08:15
by シャドウ
https://dixq.net/g/02_07.html
ここと同じサイトを参考にさせてもらっています。
あのようなは少々揶揄的な表現ですよね。
Re: ゲーム:サウンドの時間調整
Posted: 2018年8月11日(土) 10:13
by シャドウ
解決しました、どうもお手数かけました。
Re: ゲーム:サウンドの時間調整
Posted: 2018年8月11日(土) 17:00
by Dixq (管理人)
そのコードだと2秒毎に無限ループする効果音が鳴り始めそうですが、やりたいこととあってますか?
# 全然質問とは関係ないですが、そこで「揶揄的な表現」って変じゃないですかね。
# 本当に、揶揄う(からかう)意図があったのなら別ですが…。比喩的でもないし、抽象的とかでしょうか。
Re: ゲーム:サウンドの時間調整
Posted: 2018年8月11日(土) 17:16
by シャドウ
回答ありがとうございます。
揶揄ではなっく抽象的でした、失礼しました。
割られる数を増やしたら、解決しました。
Re: ゲーム:サウンドの時間調整
Posted: 2018年8月11日(土) 18:21
by Dixq (管理人)
いちいちつっかかるようで申し訳ないですが、割られる数ってCountのことですよね?
何故これを増やすと解決するのか分かりません・・。
あと、上で言ったように何故DX_PLAYTYPE_BACKをDX_PLAYTYPE_LOOPにしているのかも・・。
Re: ゲーム:サウンドの時間調整
Posted: 2018年8月11日(土) 19:18
by シャドウ
countと割る数を逆にして電卓で計算したら、秒数がなぜか出てきました。
LOOPは何度も音楽を流したいので使っています。
Re: ゲーム:サウンドの時間調整
Posted: 2018年8月12日(日) 23:19
by シャドウ
こんばんは。
サウンドを長い間流すことが出来ると思ったのですが、勘違いでした。
[/code]
#include "DxLib.h"
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow){
ChangeWindowMode(TRUE); // ウィンドウモードに変更
if (DxLib_Init() == -1) return -1; // DXライブラリ初期化処理
int image, image2; //ハンドルを受け取るためのint型変数を宣言
image = LoadGraph("画像/game_back.png"); //back.bmpのハンドルを代入
image2 = LoadGraph("画像/game_logo.png"); //char.pngのハンドルを代入
DrawGraph(0, 0, image, FALSE); //back.bmpを表示
DrawGraph(150, 10, image2, FALSE); //char.pngを表示
int Handle, count = 0;
Handle = LoadSoundMem("サウンド/1up.wav");
if (count % 120 =! 0) { // 2秒に一度
PlaySoundMem(Handle, DX_PLAYTYPE_BACK); // 効果音を再生する
count++;
}
WaitKey(); //何かキー入力があるまで待つ
DxLib_End(); //DXライブラリの終了処理
return 0;
}
[/code]
大体、一分ぐらいBGMの方を流したいのですが、どういう記述をすればよいでしょうか?
よろしくお願いします。
Re: ゲーム:サウンドの時間調整
Posted: 2018年8月12日(日) 23:43
by シャドウ
申し訳ありません、できていました。
ですが意味を理解できていません。
コード:
#include "DxLib.h"
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow){
ChangeWindowMode(TRUE); // ウィンドウモードに変更
if (DxLib_Init() == -1) return -1; // DXライブラリ初期化処理
int image, image2; //ハンドルを受け取るためのint型変数を宣言
image = LoadGraph("画像/game_back.png"); //back.bmpのハンドルを代入
image2 = LoadGraph("画像/game_logo.png"); //char.pngのハンドルを代入
DrawGraph(0, 0, image, FALSE); //back.bmpを表示
DrawGraph(150, 10, image2, FALSE); //char.pngを表示
int Handle, count = 0;
Handle = LoadSoundMem("サウンド/bgm_yume.wav");
if (count % 120 == 0) { // 2秒に一度
PlaySoundMem(Handle, DX_PLAYTYPE_BACK); // 効果音を再生する
count++;
}
WaitKey(); //何かキー入力があるまで待つ
DxLib_End(); //DXライブラリの終了処理
return 0;
}
ここの音楽を流す部分だけ教えて下さい、2秒に一度というのもよく解りません。
Re: ゲーム:サウンドの時間調整
Posted: 2018年8月13日(月) 00:48
by Dixq (管理人)
えぇと最終的には思ったことができていないということでいいのでしょうか?
やりたいことは1分位のBGMを流すだけですか?
2秒に一回やりたいことは何ですか?
これは別のトピックでもいっているDXライブラリの最小限のコードが入っていません。
メインループを作る必要があります。
現在のコードはただ一瞬で処理がWaitKeyまで進んでそこで待機しているだけです。
まずは1.9章の最小限のコードを組み込んでください。
Re: ゲーム:サウンドの時間調整
Posted: 2018年8月14日(火) 14:46
by シャドウ
こんにちは、遅くなってすみません。
修正しました。
コード:
#include "DxLib.h"
int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) {
ChangeWindowMode(TRUE), DxLib_Init(), SetDrawScreen(DX_SCREEN_BACK); //ウィンドウモード変更と初期化と裏画面設定
int Handle, Count = 0;
Handle = LoadSoundMem("サウンド/bgm_yume.wav"); // サウンド/1up.wavをロードし、識別番号をHandleに格納
while (ScreenFlip() == 0 && ProcessMessage() == 0 && ClearDrawScreen() == 0) {
int image; //ハンドルを受け取るためのint型変数を宣言
image = LoadGraph("画像/game_back.png"); //back.bmpのハンドルを代入
DrawGraph(0, 0, image, TRUE); //back.bmpを表示
if (Count % 120 == 0) { // 2秒に一度
PlaySoundMem(Handle, DX_PLAYTYPE_BACK); // 効果音を再生する
}
Count++;
}
DxLib_End(); // DXライブラリ終了処理
return 0;
}
BGMは、一分ぐらい流したいのですが、
どういう記述をすればいいのでしょうか?
結局解らずじまいですみません。
よろしくお願いします。
Re: ゲーム:サウンドの時間調整
Posted: 2018年8月14日(火) 23:42
by Dixq (管理人)
LoadGraphがものすごい勢いでメモリリークさせています。
newしているのにdeleteしていない状態です。
画像のロードはメインループに入る前に行ってください。
鳴らした音を正確に1分後に止めたいなら、時間を測る方がよいです。
全てのモニタが60Hzで動いているわけではありません。
ゲーミングモニタ等は144Hzなどもありますので、FPSを制御していない状態でカウンタに頼るのは危険です。
GetNowCountという関数で現在のミリ秒が取得できるので、それで60*1000ミリ秒測って止める方がよいでしょう。
ソースコードの例はこのようになります。
コード:
#include "DxLib.h"
int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) {
ChangeWindowMode(TRUE), DxLib_Init(), SetDrawScreen(DX_SCREEN_BACK); //ウィンドウモード変更と初期化と裏画面設定
const int startTime = GetNowCount();
const int image = LoadGraph("画像/game_back.png");
const int sound = LoadSoundMem("サウンド/bgm_yume.wav");
const int isPlaying = 1;
PlaySoundMem(sound, DX_PLAYTYPE_BACK);
while (ScreenFlip() == 0 && ProcessMessage() == 0 && ClearDrawScreen() == 0) {
DrawGraph(0, 0, image, TRUE);
if (GetNowCount() - startTime > 60 * 1000) {
if (CheckSoundMem(sound) == isPlaying) {
StopSoundMem(sound);
}
}
}
DxLib_End(); // DXライブラリ終了処理
return 0;
}
Re: ゲーム:サウンドの時間調整
Posted: 2018年8月17日(金) 21:18
by シャドウ
こんばんは、返信大変遅くなりました、申し訳ありませんでした;
コード:
#include "DxLib.h"
int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) {
ChangeWindowMode(TRUE), DxLib_Init(), SetDrawScreen(DX_SCREEN_BACK); //ウィンドウモード変更と初期化と裏画面設定
const int startTime = GetNowCount();
const int image = LoadGraph("画像/game_back.png");
const int sound = LoadSoundMem("サウンド/bgm_yume.wav");
const int isPlaying = 1;
PlaySoundMem(sound, DX_PLAYTYPE_LOOP);
while (ScreenFlip() == 0 && ProcessMessage() == 0 && ClearDrawScreen() == 0) {
DrawGraph(0, 0, image, TRUE);
if (GetNowCount() - startTime > 60 * 1000) {
if (CheckSoundMem(sound) == isPlaying) {
}
}
}
DxLib_End(); // DXライブラリ終了処理
return 0;
}
ifのブロックの中のstopの所は、音楽を繰り返したいので消しました。
結果60 * 1000で一分なので最後まで音も流れました。
ありがとうございました。
Re: ゲーム:サウンドの時間調整
Posted: 2018年8月17日(金) 22:31
by Dixq (管理人)
> シャドウさん
stopを消したらif文や時間計測関連の処理がなんの意味もなしていませんよね・・。
「1分間音楽を再生したい」とのことでしたが、ずっと再生されていればそれでいいのでしょうか?
これだと終わることなく延々と音楽を繰り返し再生し続けるように思いますが。
ただ延々と音楽を再生するだけであれば以下のコードでよいですよ。
コード:
#include "DxLib.h"
int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) {
ChangeWindowMode(TRUE), DxLib_Init(), SetDrawScreen(DX_SCREEN_BACK);
const int sound = LoadSoundMem("サウンド/bgm_yume.wav");
PlaySoundMem(sound, DX_PLAYTYPE_LOOP);
while (ScreenFlip() == 0 && ProcessMessage() == 0 && ClearDrawScreen() == 0) {
}
DxLib_End();
return 0;
}
Re: ゲーム:サウンドの時間調整
Posted: 2018年8月17日(金) 22:38
by シャドウ
そうだったんですか・・・;
何にも解ってませんね、私…汗。
毎度新しいコード書いて頂きすみません。
精進します。
Re: ゲーム:サウンドの時間調整
Posted: 2018年8月17日(金) 23:53
by Dixq (管理人)
一つ一つのコードの理解をしながら書いてみてください。
https://dixq.net/g/
の内容をよく読んでいただいたらDXライブラリの使い方は分かると思います。
書いていて一行でも分からないコードがあれば質問しながら一つ一つ理解しながらコーディングを進めてみてください。
沢山トピックを立ててもらっても構いませんので。
C言語についてよく分からないということであれば書籍で勉強してみてください。
超初心者用なら
こちら
少し初心者用なら
こちら
がおすすめです。
Re: ゲーム:サウンドの時間調整
Posted: 2018年8月18日(土) 07:24
by シャドウ
管理人さんありがとうございます。
C言語の方も勉強していこうと思います。