一个游戏如果只能够给玩家视觉上的冲击,那么他还是远远不够的!还要给玩家听觉上的熏陶。因此声音也是游戏元素之一,如果一个游戏没有声音,就相当于没有了灵魂一样。进入正题!
今天碰到一个群里朋友问:
我用pauseBackgroundMusic();暂停音乐。 为什么isBackgroundMusicPlaying()还是返回true额?
解答:
这是对的哦,pauseBackgroundMusic暂停音乐,其实他还是要继续播放的嘛,isBackgroundMusicPlaying当然返回true了!
只有你调用stopBackgroundMusic停止音乐,才会真正意义上停止,下次播放将会重头开始!此时isBackgroundMusicPlaying将会返回false,因为它真正停止了哦!
这个完全是理解的问题,不是bug哦!!!!!
如果你还不明白!!(怎么会不明白呢!!!)那我们就从源代码来分析它吧.....
1、首先看一下isBackgroundMusicPlaying的实现:
bool SimpleAudioEngine::isBackgroundMusicPlaying()
{
return sharedMusic().IsPlaying();
}
bool MciPlayer::IsPlaying()
{
return m_bPlaying;
}
简单的一目了然,他其实就是返回m_bPlaying成员变量的值了(bool类型)
2、我们再看一下stopBackgroundMusic的实现:
void SimpleAudioEngine::stopBackgroundMusic(bool bReleaseData)
{
if (bReleaseData)
{
sharedMusic().Close();
}
else
{
sharedMusic().Stop();
}
}
void MciPlayer::Close()
{
if (m_bPlaying)
{
Stop();
}
if (m_hDev)
{
_SendGenericCommand(MCI_CLOSE);
}
m_hDev = 0;
m_bPlaying = false;
}
void MciPlayer::Stop()
{
_SendGenericCommand(MCI_STOP);
m_bPlaying = false;
}
看见没有调用它的时候,会设置m_bPlaying = false;(明白了吧,不需要解释了!)
3、最后看一下pauseBackgroundMusic的实现
void SimpleAudioEngine::pauseBackgroundMusic()
{
sharedMusic().Pause();
}
void MciPlayer::Pause()
{
_SendGenericCommand(MCI_PAUSE);
}
看见没看见没???他没有对m_bPlaying 进行任何赋值(所以你调用它,不会改变m_bPlaying 的结果)
强列建议,多看源码,多google!!!!!