SFML:在 Visual Studio 2017 中使用本地 Windows 调试器时打开白色窗口的问题

问题描述 投票:0回答:1

我在使用 SFML 库为迷宫游戏制作菜单时遇到问题。当我在 Visual Studio 2017 中单击“本地 Windows 调试器”时,程序会打开一个白色窗口,这不是预期的行为。作为一个编程新手,我可能无法找出代码中的所有错误,但我相信它是正确编写的。有人可以帮助我识别并修复代码中的问题吗?

#pragma once
#include <SFML/Graphics.hpp>
#include <iostream>

using namespace std;
using namespace sf;

#define Max_main_menu 4

class Menu
{
public:

    Menu(float width, float height);

    void draw(RenderWindow& window);
    void MoveUp();
    void MoveDown();

    int MenuPressed()
    {
        return MenuSelected;
    }
    ~Menu();

private:
    int MenuSelected;
    Text menu[Max_main_menu];
};

menu.h
_____________________________
#include "Menu.h"

Menu::Menu(float widht, float height)
{


    //Graj

    menu[0].setFillColor(Color::White);
    menu[0].setString("Graj");
    menu[0].setCharacterSize(70);
    menu[0].setPosition(600, 300);


    menu[1].setFillColor(Color::White);
    menu[1].setString("Opcje");
    menu[1].setCharacterSize(60);
    menu[1].setPosition(500, 300);


    menu[2].setFillColor(Color::White);
    menu[2].setString("Autorzy");
    menu[2].setCharacterSize(60);
    menu[2].setPosition(400, 300);


    menu[3].setFillColor(Color::White);
    menu[3].setString("Najlepszy Csas");
    menu[3].setCharacterSize(60);
    menu[3].setPosition(300, 300);


    MenuSelected = -1;
}
Menu::~Menu()
{

}

void Menu::draw(RenderWindow& window) {
    for (int i = 0; i < Max_main_menu; i++) {
        window.draw(menu[i]);
    }
}

void Menu::MoveUp() {
    if (MenuSelected - 1 >= 0) {
        menu[MenuSelected].setFillColor(Color::White);
        MenuSelected--;

        if (MenuSelected == -1) {
            MenuSelected = 2;
        }
        menu[MenuSelected].setFillColor(Color::Blue);
    }
}

void Menu::MoveDown()
{
    if (MenuSelected + 1 <= Max_main_menu)
    {
        menu[MenuSelected].setFillColor(Color::White);
        MenuSelected++;
        if (MenuSelected == 4)
        {
            MenuSelected = 0;
        }
        menu[MenuSelected].setFillColor(Color::Blue);
    }
}
menu.cpp
______________________________________________________
#include <SFML/Graphics.hpp>
#include "D:\Proejkt\Menu.h"



int main()
{
    RenderWindow MENU(VideoMode(1280, 720), "Labirynt", Style::Default);
    Menu menu(MENU.getSize().x, MENU.getSize().y);


    while (MENU.isOpen())
    {
        Event event;
        while (MENU.pollEvent(event))
        {
            if (event.type == Event::Closed)
            {
                MENU.close();
            }
            if (event.type == Event::KeyReleased)
            {
                if (event.key.code == Keyboard::Up)
                {
                    menu.MoveUp();
                    break;
                }
                if (event.key.code == Keyboard::Down)
                {
                    menu.MoveDown();
                    break;
                }
                if (event.key.code == Keyboard::Return)
                {
                    RenderWindow Graj(VideoMode(1280, 720), "Labirynt");
                    RenderWindow Opcje(VideoMode(1280, 720), "Opcje");
                    RenderWindow Autorzy(VideoMode(1280, 720), "Autorzy");
                    RenderWindow NajlepszyCzas(VideoMode(1280, 720), "Najlepszy Czas");

                    int x = menu.MenuPressed();
                    if (x == 0)
                    {
                        while (Graj.isOpen())
                        {
                            Event aevent;
                            while (Graj.pollEvent(aevent))
                            {
                                if (aevent.type == Event::Closed)
                                {
                                    Graj.close();
                                }
                                if (aevent.type == Event::KeyPressed)
                                {
                                    if (aevent.key.code == Keyboard::Escape)
                                    {
                                        Graj.close();
                                    }
                                }

                            }

                        }
                        Opcje.close();
                        Autorzy.close();
                        NajlepszyCzas.close();
                        Graj.clear();
                        Graj.display();



                    }
                    if (x == 1)
                    {
                        while (Opcje.isOpen())
                        {
                            Event aevent;
                            while (Opcje.pollEvent(aevent))
                            {
                                if (aevent.type == Event::Closed)
                                {
                                    Opcje.close();
                                }
                                if (aevent.type == Event::KeyPressed)
                                {
                                    if (aevent.key.code == Keyboard::Escape)
                                    {
                                        Opcje.close();
                                    }
                                }

                            }

                        }
                        Graj.close();
                        Autorzy.close();
                        NajlepszyCzas.close();
                        Opcje.clear();
                        Opcje.display();



                    }
                }

            }



        }

    }
    MENU.clear();
    menu.draw(MENU);
    MENU.display();
}
project.cpp
c++ window sfml
1个回答
0
投票

您的

Main.clear()
Main.draw()
Main.display()
不在 while 循环中。请把它们放在 while 循环中。

© www.soinside.com 2019 - 2024. All rights reserved.