我正在使用 VS 2010。我的游戏内菜单在发布模式下没有关闭有问题。它在调试模式下工作。这是我的代码,尽可能多地删除了无关代码,希望您仍然可以看到它的作用。
应该发生的是当按下 ESC 键时,菜单显示,然后用户单击一个按钮并返回一个 int 告诉 Game 类该做什么。当我单击退出时,它可以工作。但是,当我单击其他任何内容时,会执行正确的操作,菜单会关闭一闪而过,然后又重新启动。我不知道为什么它保持开放。如果我在菜单启动时按下按钮(例如 ESC),菜单会按预期关闭。
Game::GameLoop
{ //etc code &Update and Draw Functions
if(currentEvent.Type == sf::Event::KeyPressed && currentEvent.Key.Code == sf::Key::Escape)
{
ShowGameMenu();
}
//Code
//Display() - clear buffer to the screen
}
void Game::ShowGameMenu()
{
int bMenu = 0;
bMenu = menu.Show(m_MainWindow);
switch (bMenu) {
case 1: //gameOn
m_GameState = dlb::Playing;
break;//etc cases that aren't the problem
}
}
int Menu::Show(sf::RenderWindow& window)
{//Various menuState code that isn't the problem removed - This passes the returnCode back to game
int code = 0;
code = MainMenu(window);
return code;
}
//returns 1-gameOn, 2-SplashScreen, 0-close, 3-restartLvl, 4-restartGame, 5-option,
int Menu::MainMenu(sf::RenderWindow& window)
{
int returnCode = -1;
bool running = true;
sprite.SetPosition(center);
sf::Event currentEvent;
while (running)
{
window.GetEvent(currentEvent);
Draw(window); //Displays the menu on top of game window
if(currentEvent.Type == sf::Event::KeyPressed && currentEvent.Key.Code == sf::Key::Escape) //This works too
{
returnCode = 1;
running = false;
}
if (currentEvent.Type == sf::Event::MouseButtonReleased && currentEvent.MouseButton.Button == sf::Mouse::Left)
{
sf::Vector2f mouse = sf::Vector2f((float)currentEvent.MouseButton.X, (float)currentEvent.MouseButton.Y);
while ((*currItr)->IsEnd() != true)
{
if ((*currItr)->isClicked(mouse))
{
//returns 1-gameOn, 2-SplashScreen, 0-close, 3-restartLvl, 4-restartGame, 5-option,
switch ((*currItr)->GetType())
{
case dlb::Exit:
returnCode = 0;
break;
case dlb::ReturnGame:
returnCode = 1;
break;
//various cases removed here because they matter not
}
running = false;
break;
}
else
{
++currItr;
}
}
}
}
return returnCode;
}
很抱歉有这么多代码,我试图删除所有无助于解释发生了什么的东西。如果您需要更多,我可以发布更多代码并尝试解释我不清楚的任何内容。在这一点上,任何想法都会受到赞赏,我已经尝试了我能想到的一切,除了打破它并不得不修复它之外什么也没做。
[更新]
它返回正确的代码,如果我选择重新启动(任一风味)、退出或 SplashScreen,我会得到正确的行为。当我返回 1 继续游戏时,菜单闪烁关闭然后重新打开。但只有当我点击时。如果我按下代码中其他任何位置的任何其他键或按钮,它就会关闭。(例如,在单击之前按住向上箭头移动播放器,它将正确关闭菜单并移动角色。)我已经上下搜索了我的代码,并且在任何地方都没有看到任何未初始化的变量。我愿意尝试任何事情;我完全不知所措。