Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/136.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 独特的ptr和StateManager用于我的基本SFML游戏,我从命令屏幕上得到了错误 void游戏管理器::pushMenuState() { states.push_back(std::move(std::make_unique(window));//std::make_unique(window) } void GameManager::pushPlayState() { states.push_back(std::move(std::make_unique(window));//std::make_unique(window) } /*-------------------------------------------------*/ void GameManager::popState() { states.erase(states.begin()); } //////////////////////////////////////////////////// void GameManager::Update() { 同时(窗口->等参线() { 如果(sf::Keyboard::isKeyPressed(sf::Keyboard::D)) { isMenu=假; } 如果(sf::Keyboard::isKeyPressed(sf::Keyboard::S)) { isMenu=真; } //////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////////// 如果(isMenu) { if(states.empty()) pushMenuState(); else if(states.size()getStateType()!=状态::菜单) pushMenuState(); if(states.size()>1&&states.front()->getStateType()!=状态::菜单) popState(); states.back()->更新(窗口); } //////////////////////////////////////////////////////////////////////////////////////////////////////// 其他的 { if(states.empty()) pushPlayState(); else if(states.size()getStateType()!=状态::播放) pushPlayState(); if(states.size()>1&&states.front()->getStateType()!=State::PLAY) popState(); states.back()->更新(窗口); } //////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////////// } }_C++_State_Sfml_Unique Ptr - Fatal编程技术网

C++ 独特的ptr和StateManager用于我的基本SFML游戏,我从命令屏幕上得到了错误 void游戏管理器::pushMenuState() { states.push_back(std::move(std::make_unique(window));//std::make_unique(window) } void GameManager::pushPlayState() { states.push_back(std::move(std::make_unique(window));//std::make_unique(window) } /*-------------------------------------------------*/ void GameManager::popState() { states.erase(states.begin()); } //////////////////////////////////////////////////// void GameManager::Update() { 同时(窗口->等参线() { 如果(sf::Keyboard::isKeyPressed(sf::Keyboard::D)) { isMenu=假; } 如果(sf::Keyboard::isKeyPressed(sf::Keyboard::S)) { isMenu=真; } //////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////////// 如果(isMenu) { if(states.empty()) pushMenuState(); else if(states.size()getStateType()!=状态::菜单) pushMenuState(); if(states.size()>1&&states.front()->getStateType()!=状态::菜单) popState(); states.back()->更新(窗口); } //////////////////////////////////////////////////////////////////////////////////////////////////////// 其他的 { if(states.empty()) pushPlayState(); else if(states.size()getStateType()!=状态::播放) pushPlayState(); if(states.size()>1&&states.front()->getStateType()!=State::PLAY) popState(); states.back()->更新(窗口); } //////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////////// } }

C++ 独特的ptr和StateManager用于我的基本SFML游戏,我从命令屏幕上得到了错误 void游戏管理器::pushMenuState() { states.push_back(std::move(std::make_unique(window));//std::make_unique(window) } void GameManager::pushPlayState() { states.push_back(std::move(std::make_unique(window));//std::make_unique(window) } /*-------------------------------------------------*/ void GameManager::popState() { states.erase(states.begin()); } //////////////////////////////////////////////////// void GameManager::Update() { 同时(窗口->等参线() { 如果(sf::Keyboard::isKeyPressed(sf::Keyboard::D)) { isMenu=假; } 如果(sf::Keyboard::isKeyPressed(sf::Keyboard::S)) { isMenu=真; } //////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////////// 如果(isMenu) { if(states.empty()) pushMenuState(); else if(states.size()getStateType()!=状态::菜单) pushMenuState(); if(states.size()>1&&states.front()->getStateType()!=状态::菜单) popState(); states.back()->更新(窗口); } //////////////////////////////////////////////////////////////////////////////////////////////////////// 其他的 { if(states.empty()) pushPlayState(); else if(states.size()getStateType()!=状态::播放) pushPlayState(); if(states.size()>1&&states.front()->getStateType()!=State::PLAY) popState(); states.back()->更新(窗口); } //////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////////// } },c++,state,sfml,unique-ptr,C++,State,Sfml,Unique Ptr,这是我的密码。首先是菜单状态。我按“D”键切换播放状态。它正在工作。但当我想再次进入菜单状态时,我按下了“S”,我从命令提示符得到了错误,错误不是来自IDE: 错误说明: AL_无效的_操作 当前状态下不允许指定的操作 SoundStream.cpp(317)中的内部OpenAL调用失败。 表达方式: alSourcePlay(m_源) 错误说明: AL_无效的_操作 当前状态下不允许指定的操作 SoundStream.cpp(329)中的内部OpenAL调用失败。 表达方式: alGetSou

这是我的密码。首先是菜单状态。我按“D”键切换播放状态。它正在工作。但当我想再次进入菜单状态时,我按下了“S”,我从命令提示符得到了错误,错误不是来自IDE:

错误说明: AL_无效的_操作 当前状态下不允许指定的操作

SoundStream.cpp(317)中的内部OpenAL调用失败。 表达方式: alSourcePlay(m_源) 错误说明: AL_无效的_操作 当前状态下不允许指定的操作

SoundStream.cpp(329)中的内部OpenAL调用失败。 表达方式: alGetSourcei(m_源、AL_缓冲区、已处理和已处理) 错误说明: AL_无效的_操作 当前状态下不允许指定的操作

SoundSource.cpp(196)中的内部OpenAL调用失败。 表达方式: alGetSourcei(m_源、AL_源、状态和状态) 错误说明: AL_无效的_操作 当前状态下不允许指定的操作

SoundSource.cpp(196)中的内部OpenAL调用失败。 表达方式: alGetSourcei(m_源、AL_源、状态和状态) 错误说明: AL_无效的_操作 当前状态下不允许指定的操作

SoundStream.cpp(317)中的内部OpenAL调用失败。 表达方式: alSourcePlay(m_源) 错误说明: AL_无效的_操作 当前状态下不允许指定的操作

SoundStream.cpp(329)中的内部OpenAL调用失败。 表达方式: alGetSourcei(m_源、AL_缓冲区、已处理和已处理) 错误说明: AL_无效的_操作 当前状态下不允许指定的操作

SoundSource.cpp(196)中的内部OpenAL调用失败。 表达方式: alGetSourcei(m_源、AL_源、状态和状态) 错误说明: AL_无效的_操作 当前状态下不允许指定的操作

SoundSource.cpp(196)中的内部OpenAL调用失败。 表达方式: alGetSourcei(m_源、AL_源、状态和状态) 错误de 返回的进程-1073741819(0xC0000005)执行时间:4.611s 按任意键继续


为什么我会这样?推送状态有什么问题?

解释:我有PlayState类和MenuState类继承自State类。我是veGameManager类。GameManager有“unique_ptr states”变量。当我在菜单上时,我正在将make_unique(窗口)按到状态,当我处于播放状态并且正在执行状态时,我正在将make_unique(窗口)按到状态。如果一个状态有多个状态,则删除(states.begin())。我的播放状态有player变量。和播放器有着色器,纹理和音频。当我从go to MenuStates的状态中删除播放状态时,播放状态唯一指针会删除自身。我从openAL和openGL得到了错误信息。我能做什么?
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);
        }
////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////

    }


}