游戏启动到空白的白色屏幕,而不是加载屏幕



试图创建一个游戏,但我遇到了第一个障碍。游戏进入空白的白色屏幕,而不是显示红色屏幕,我无法进入加载屏幕和菜单。我已经检查过我在每个屏幕上都使用了显示器,但不知道哪里出了问题。我也没有错误。下面是我的代码

game.cpp

#include "stdafx.h"
#include "Game.h"
#include "LoadScreen.h"
#include "MainMenu.h"

void Game::Start (void)
{
    Game game;
if(_gameState != Unlaunched)
    return;
game._mainWindow.create(sf::VideoMode(1024,768,32),"Code Matrix");
_gameState = Game::LogoScreen;
while (!Exists())
{
    GameLoop();
}
game._mainWindow.close();
}
bool Game::Exists()
{
    if(_gameState == Game::Exiting)
        return true;
    else
        return false;
}
void Game::GameLoop()
{
    Game game;
    sf::Event currentEvent;
    while (game._mainWindow.pollEvent(currentEvent))
    {
        switch (_gameState) 
        {
        case Game::MenuWindow:
            {
                ShowMenu();
                break;
            }
        case Game::LogoScreen:
            {
                ShowLogoScreen();
                break;
            }
        case Game::Playing:
            {
                sf::Event currentEvent;
                while (game._mainWindow.pollEvent(currentEvent))
                {
                game._mainWindow.clear(sf::Color(255,0,0));
                game._mainWindow.display();
                if(currentEvent.type == sf::Event::Closed) 
                    _gameState = Game::Exiting;
                if(currentEvent.type == sf::Event::KeyPressed)
                {
                    if(currentEvent.key.code == sf::Keyboard::Escape) ShowMenu();
                }
                }
                break;
            }
        }
    }
}
void Game::ShowLogoScreen()
{
    Game game;
    LoadScreen loadScreen;
    loadScreen.Show(game._mainWindow);
    _gameState = Game::MenuWindow; 
}
void Game::ShowMenu()
{
Game game;
MainMenu mainMenu;
MainMenu::MenuOption option = mainMenu.show(game._mainWindow);
switch(option)
{
case MainMenu::Exit:
    _gameState = Game::Exiting;
    break;
case MainMenu::Play:
    _gameState = Game::Playing;
    break;
}
}
Game::GameState Game::_gameState = Unlaunched;

LoadScreen.cpp

#include "stdafx.h"
#include "LoadScreen.h"
void LoadScreen::Show(sf::RenderWindow & renderWindow)
{
    sf::Texture image;
    if (image.loadFromFile("images/LoadingScreen.png") !=true)
    {
        return;
    }
    sf::Sprite sprite (image);
    renderWindow.draw(sprite);
    renderWindow.display();
    sf::Event event;
    while (true)
    {
        while (renderWindow.pollEvent(event))
        {
            if(event.type == sf::Event::EventType::KeyPressed
                ||event.type == sf::Event::EventType::MouseButtonPressed
                || event.type == sf::Event::EventType::Closed)
            {
                return;
        }
    }
}
}

主菜单.cpp

#include "stdafx.h"
  #include "MainMenu.h"

  MainMenu::MenuOption MainMenu::show(sf::RenderWindow& window)
  {
    //Load menu image from file
    sf::Texture image;
   image.loadFromFile("images/MainMenu.png");
   sf::Sprite sprite(image);
   //Setup clickable regions 
   //Play menu item coordinates
   MenuItem playButton;
   playButton.rect.top= 319;
   playButton.rect.height = 626;
   playButton.rect.left = 189;
   playButton.rect.width = 329;
   playButton.action = Play;
   //Options menu item coordinates
   MenuItem optionButton;
   optionButton.rect.left = 356;
   optionButton.rect.height = 596;
   optionButton.rect.top = 287;
   optionButton.rect.width = 483;
   optionButton.action = Options;
   //Exit menu item coordinates
   MenuItem exitButton;
   exitButton.rect.left = 554;
   exitButton.rect.height = 580;
   exitButton.rect.top = 318;
   exitButton.rect.width = 687;
   exitButton.action = Exit;

   _menuItems.push_back(playButton);
   _menuItems.push_back(exitButton);
   window.draw(sprite);
   window.display();
   return GetMenuAction(window);
 }
 MainMenu::MenuOption MainMenu::HandleClick(int x, int y)
 {
   std::list<MenuItem>::iterator it;
   for ( it = _menuItems.begin(); it != _menuItems.end(); it++)
   {
     sf::Rect<int> menuItemRect = (*it).rect;
     if( menuItemRect.height > y 
       && menuItemRect.top < y 
       && menuItemRect.left < x 
       && menuItemRect.width > x)
       {
         return (*it).action;
       }
   }
   return null;
 } 
 MainMenu::MenuOption  MainMenu::GetMenuAction(sf::RenderWindow& window)
 {
   sf::Event menuEvent;
   while(true)
   {
     while(window.pollEvent(menuEvent))
     {
         if(menuEvent.type == sf::Event::MouseButtonPressed)
       {
           return HandleClick(menuEvent.mouseButton.x,menuEvent.mouseButton.y);
       }
       if(menuEvent.type == sf::Event::Closed)
       {
         return Exit;
       }
     }
   }
 }
void Game::ShowLogoScreen()
{
    Game game; // <- this creates a NEW game. You want to use your already created game.
    LoadScreen loadScreen;
    loadScreen.Show(game._mainWindow);
    _gameState = Game::MenuWindow; 
}

您在徽标屏幕的本地创建了一个新游戏。那个可能连窗户都没有。你应该参考你现有的游戏变量。

最新更新