我在使用 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
您的
Main.clear()
、Main.draw()
和 Main.display()
不在 while 循环中。请把它们放在 while 循环中。