質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

DXライブラリ

DXライブラリとは、DirectXを使ったWindowsソフトの開発に必ず付いて回るDirectXやWindows関連のプログラムを使い易くまとめた形で利用できるようにしたC++言語用のゲームライブラリです。

Q&A

解決済

1回答

3324閲覧

DXライブラリ StopMusicMem

itohii0626

総合スコア16

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

DXライブラリ

DXライブラリとは、DirectXを使ったWindowsソフトの開発に必ず付いて回るDirectXやWindows関連のプログラムを使い易くまとめた形で利用できるようにしたC++言語用のゲームライブラリです。

0グッド

0クリップ

投稿2016/03/25 17:11

音楽を扱う関数についての質問です。
DXライブラリを触り始めて、初歩的なゲームを作っています。

//BGM読み込み
void CMusic::StartBGM_Load(void)
{
//Musicは音楽ハンドル変数
Music = LoadSoundMem("Sound/StartBGM.mp3");
}

//BGM再生
void CMusic::BGM_Play(void)
{
if (MusicFlag == true) {
return;
}

MusicFlag = true; PlaySoundMem(Music,DX_PLAYTYPE_LOOP);

}

//音楽停止
void CMusic::BGM_Stop(void)
{
StopMusicMem(Music);
}

このように音楽や効果音を扱うクラスを作り、再生や停止を制御しようとしているのですが、//音楽停止の部分のStopMusicMemの関数がいつも-1で帰ってきます(停止できず)。なにか考えられる原因はありますか。

ロールプレイングによくあるギャラリーのようなモードをつくり、
BGMの一覧のようなものを載せたいのです。
そのモードに入ったときに、上記のBGM_Stop(void)を、まずは実験程度に実行するようにしているのですが、音楽が停止されません。(画面の切り替わりはできてます)

//音楽停止
void CMusic::BGM_Stop(void)
{
DeleteMusicMem(Music);
}

ちなみにこっちに切り替えると、音楽は停止します。Deleteの方が正解なのであれば、その指摘もお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

こんにちは。

DXライブラリは触ったことがないので一般論ですが、検索してみるとDeleteMusicMem()は非公開関数一覧に記載されてました。公開されている関数を使った方が問題は発生しにくいと思います。

投稿2016/03/25 23:55

Chironian

総合スコア23272

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

itohii0626

2016/03/26 02:32

回答ありがとうございます。 でもDeleteStopMem()の方がしっかり音楽停止してくれるんですよね…。 それでも仰っている公開されている関数を使うべきでしょうか
Chironian

2016/03/26 07:56

公開関数の範囲でやりたいことが出来ない場合は、しかたがないかも知れませんね。 私自身は非公開機能はできるだけ使いません。大抵の場合、何か問題があるから「非公開」とされています。そして、その問題自体、非公開なので把握することが難しく、苦労した挙句にその問題に引っかかって最終的に断念することが多いです。 ところで、公開機能では何か問題があったのでしょうか? 質問をお見受けする限り、公開機能で十分なように見えますので。
itohii0626

2016/03/27 02:16

・ゲームが始まりタイトルが表示(BGM再生)※問題なし ・GAME START か MUSIC(ギャラリーのような) かを選択 ※問題なし ・MUSICを選択した場合、一旦音楽を止めたい。  ※ここで↑の質問です。StopMusicMem(Music) //公開されている機能  だと、音楽は停止されず、DeleteMusucMem(Music) //非公開  だと、ちゃんと停止される。  という状況です。
Chironian

2016/03/27 03:37

LoadSoundMem()、PlaySoundMem()、StopMusicMem()も含めて「非公開関数一覧」に記載があり、かつ、「DXライブラリ置き場」の「関数リファレンスページ」に記載がないので、これらも非公開関数のように思います。 「関数リファレンスページ」にPlayMusic()、StopMusic()の説明とサンプルがあります。 まずはこちらをお試しされてみることをお勧めします。既に試して問題があったのでしたら、ごめんなさい。 ↓に作者様が質問掲示版を設けられているようです。 http://dxlib.o.oo7.jp/cgi/patiobbs/patio.cgi? 公開関数がサンプル通りに動作しないようでしたら、質問掲示板でお尋ねになるのも手かもしれません。
itohii0626

2016/03/27 09:53

ありがとうございます。やってみます!
itohii0626

2016/03/31 07:18

Chironian さんの考える方法とは少し違いましたが、 BGM_Load()の部分にも早期リターンを入れることで解決しました。 回答ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問