如何解决我的基本SFML游戏的unique_ptr和StateManager,从命令屏幕出现错误
void GameManager::pushMenuState()
{
states.push_back(std::move(std::make_unique<MenuState>(window)));//std::make_unique<MenuState>(window)
}
void GameManager::pushPlayState()
{
states.push_back(std::move(std::make_unique<PlayState>(window)));//std::make_unique<PlayState>(window)
}
/*-------------------------------------------------*/
void GameManager::popState()
{
states.erase(states.begin());
}
////////////////////////////////////////////////////
void GameManager::Update()
{
while(window->isOpen())
{
if(sf::Keyboard::isKeyPressed(sf::Keyboard::D))
{
isMenu=false;
}
if(sf::Keyboard::isKeyPressed(sf::Keyboard::S))
{
isMenu=true;
}
////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////
if(isMenu)
{
if(states.empty())
pushMenuState();
else if(states.size()<=1&&states.front()->getStateType()!=State::MENU)
pushMenuState();
if(states.size()>1&&states.front()->getStateType()!=State::MENU)
popState();
states.back()->Update(window);
}
////////////////////////////////////////////////////////////////////////////////////////////////////////
else
{
if(states.empty())
pushPlayState();
else if(states.size()<=1&&states.front()->getStateType()!=State::PLAY)
pushPlayState();
if(states.size()>1&&states.front()->getStateType()!=State::PLAY)
popState();
states.back()->Update(window);
}
////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////
}
}
这是我的代码。首先,我处于菜单状态。我按“ D”键切换到播放状态。这是工作。但是,当我想再次进入菜单状态时,我按下了“ S”,命令提示符出现错误,错误不是来自IDE:
错误说明: AL_INVALID_OPERATION 当前状态不允许执行指定的操作。
内部OpenAL调用在SoundStream.cpp(317)中失败。 表达: alSourcePlay(m_source) 错误说明: AL_INVALID_OPERATION 当前状态不允许执行指定的操作。
内部OpenAL调用在SoundStream.cpp(329)中失败。 表达: alGetSourcei(m_source,AL_BUFFERS_PROCESSED和&nbProcessed) 错误说明: AL_INVALID_OPERATION 当前状态不允许执行指定的操作。
内部OpenAL调用在SoundSource.cpp(196)中失败。 表达: alGetSourcei(m_source,AL_SOURCE_STATE和&status) 错误说明: AL_INVALID_OPERATION 当前状态不允许执行指定的操作。
内部OpenAL调用在SoundSource.cpp(196)中失败。 表达: alGetSourcei(m_source,AL_SOURCE_STATE和&status) 错误说明: AL_INVALID_OPERATION 当前状态不允许执行指定的操作。
内部OpenAL调用在SoundStream.cpp(317)中失败。 表达: alSourcePlay(m_source) 错误说明: AL_INVALID_OPERATION 当前状态不允许执行指定的操作。
内部OpenAL调用在SoundStream.cpp(329)中失败。 表达: alGetSourcei(m_source,AL_BUFFERS_PROCESSED和&nbProcessed) 错误说明: AL_INVALID_OPERATION 当前状态不允许执行指定的操作。
内部OpenAL调用在SoundSource.cpp(196)中失败。 表达: alGetSourcei(m_source,AL_SOURCE_STATE和&status) 错误说明: AL_INVALID_OPERATION 当前状态不允许执行指定的操作。
内部OpenAL调用在SoundSource.cpp(196)中失败。 表达: alGetSourcei(m_source,AL_SOURCE_STATE和&status) 错误 进程返回-1073741819(0xC0000005)执行时间:4.611 s 按任意键继续。
为什么我明白了?推送状态有什么问题?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。