繁体   English   中英

您将如何使用变量代替 mciSendString 中的音量? C++

[英]How would you use a variable in place of volume in mciSendString? C++

所以我正在使用 C++ 制作一个基本的 2D 格斗游戏。 对于声音/音频效果,我正在使用mciSendString()

            mciSendString(TEXT("setaudio sounds\\character_select.mp3 volume to 500"), NULL, 0, NULL);

上面的代码工作正常。 它将声音的音量设置为 500; 但是,我不想硬编码音量值。 我希望它逐渐变小,而不必一遍又一遍地复制和粘贴同一行,只需要一个较小的整数值即可。

            mciSendString(TEXT("setaudio sounds\\character_select.mp3 volume to " + volume ), NULL, 0, NULL);

我想做这样的事情。 我可以有一个包含任何整数值的变量,而不是硬编码的 500。 然而,当我运行它时,我没有收到任何错误,并且音频继续播放,就像它通常在 1000 而不是 500 时一样。

我该怎么做才能解决这个问题?

首先,您不能将TEXT()宏与变量一起使用。 它只能与字符数组文字(例如"Hello"一起使用,并在文字之前放置一个L ,具体取决于用于编译代码的选项(多字节宽的字符串或UTF8)。

对于后一个选项,您可以使用std::string变量来编写命令:

std::ostringstream oss;
int volume = 300;
oss << "setaudio sounds\\character_select.mp3 volume to " << volume;
std::string cmd = oss.str();

mciSendString(cmd.c_str(), NULL, 0, NULL);

对于另一个选项,您需要相应地使用std::wstringstd::wostringstream

我在 mcisendstring 上遇到了同样的问题,因为你使用的是 C++,我建议你像以前一样解决这个问题

创建一个名为 mcicommand 的函数,如下所示:

    #include <string>
    string mcicommand(string volume){
    
        string command = "setaudio song volume to ";
        
        int found = command.find_last_of(" ");
        command = command.substr(0, found) + " " + volume;
        
        return command;
}

现在每当你想用 mcisendstring 调用这个函数时,就这样做

string volume;
cin >> volume;
vol_command = mcicommand(volume)
mcisendstring(vol_command.c_str , NULL, 0, NULL); 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM