c++ - 命名空间行为怪异

标签 c++ namespaces sfml

好的,伙计们...我正在使用 SFML 编写我的第一个游戏,我发现了一个令人讨厌的问题...我会解释。

主要.cpp

#include "include/SFML/include/SFML.hpp"
#include "include/menu.h"
#include <iostream>
#include <fstream>
#include "include/checkfileexistence.h"
#include "include/fonts.h"

#define FPS 20

bool loadFonts();
bool loadMenu();

int main ()
{
    if (!loadFonts()) {std::cout << "Could not load fonts!"; return EXIT_FAILURE;}
    sf::RenderWindow window (sf::VideoMode(0,0),"Evility", sf::Style::Fullscreen);
    window.setFramerateLimit(FPS);
    sf::Event event;
    window.setKeyRepeatEnabled(false);
    while (window.isOpen())
    {
        window.clear();
        if (window.pollEvent(event))
        {
            switch (event.type)
            {
                case sf::Event::Closed: {window.close(); break;}
                case sf::Event::KeyPressed:
                {
                    switch (event.key.code)
                    {
                        case sf::Keyboard::Escape: {window.close(); break;}
                        case sf::Keyboard::LAlt && sf::Keyboard::F4: {window.close(); break;}
                    }
                }
            }
        }
        if (menu::isBeingUsed)
        {
            if (!menu::isRunning)
            {
                if (!loadMenu()) {std::cout << "Could not load menu files!"; return EXIT_FAILURE;}

                menu::music.setLoop(true);
                menu::music.play();
                menu::isRunning = true;
                window.setVisible(true);
            }

            if ((sf::Keyboard::isKeyPressed(sf::Keyboard::Up)) || (sf::Keyboard::isKeyPressed(sf::Keyboard::W)))
            {
                menu::selectedOption--;
                if (menu::selectedOption < 0)
                {
                    menu::selectedOption = 3;
                }
            }
            if ((sf::Keyboard::isKeyPressed(sf::Keyboard::Down)) || (sf::Keyboard::isKeyPressed(sf::Keyboard::S)))
            {
                menu::selectedOption++;
                if (menu::selectedOption > 3)
                {
                    menu::selectedOption = 0;
                }
            }
            if (sf::Keyboard::isKeyPressed(sf::Keyboard::Return))
            {
                switch (menu::selectedOption)
                {
                    case 3:
                        {
                         window.close();
                         break;
                        }
                }
            }

            switch (menu::selectedOption)
            {
            case 0:
                menu::optionSelector.setPosition(sf::Vector2f(60,105));
                break;
            case 1:
                menu::optionSelector.setPosition(sf::Vector2f(60,155));
                break;
            case 2:
                menu::optionSelector.setPosition(sf::Vector2f(60,205));
                break;
            case 3:
                menu::optionSelector.setPosition(sf::Vector2f(60,255));
                break;
            }
            window.draw(menu::spriteBackground);
            window.draw(menu::textStartGame);
            window.draw(menu::textContinueGame);
            window.draw(menu::textOptions);
            window.draw(menu::textQuitGame);
            window.draw(menu::optionSelector);
        }

        window.display();
    }
}

bool loadFonts()
{
    if (!font::ArcadePix.loadFromFile("resources/Fonts/ArcadePix.TTF"))
    {
        return false;
    }
    return true;
}


bool loadMenu ()
{
    menu::music.openFromFile("resources/Music/Unity.wav");
    menu::music.setLoop (true);
    menu::textureBackground.loadFromFile("resources/wallpaper.png");
    menu::spriteBackground.setTexture(menu::textureBackground, false);
    menu::spriteBackground.setPosition(0,0);
    menu::spriteBackground.setScale(window.getSize().width / menu::spriteBackground.getLocalBounds().width, window.getSize().height / menu::spriteBackground.getLocalBounds().height);
    menu::optionSelector.setSize (sf::Vector2f(25,25));
    menu::optionSelector.setFillColor(sf::Color::Yellow);
    menu::optionSelector.setPosition(60,105);
    menu::textStartGame.setFont(font::ArcadePix);
    menu::textStartGame.setColor(sf::Color::Red);
    menu::textStartGame.setPosition(sf::Vector2f(100,100));
    menu::textStartGame.setString("Start Game");
    menu::textContinueGame.setFont (font::ArcadePix);
    if (fileExists("resources/Saves/saves.txt"))
    {
        menu::textContinueGame.setColor(sf::Color::Red);
    }
    else
    {
        menu::textContinueGame.setColor(sf::Color(211,211,211,127));
    }
    menu::textContinueGame.setPosition(100,150);
    menu::textContinueGame.setString("Continue Game");
    menu::textOptions.setFont(font::ArcadePix);
    menu::textOptions.setColor(sf::Color::Red);
    menu::textOptions.setPosition(100,200);
    menu::textOptions.setString("Options");
    menu::textQuitGame.setFont(font::ArcadePix);
    menu::textQuitGame.setColor(sf::Color::Red);
    menu::textQuitGame.setPosition(100,250);
    menu::textQuitGame.setString("Quit Game");
    return true;
}

菜单.h

#ifndef MENU_H_
#define MENU_H_

#include "SFML/include/SFML.hpp"

namespace menu{
bool isBeingUsed = true;
bool isRunning = false;

sf::RectangleShape rectBackground (sf::Vector2f (1080,720));


sf::Texture textureBackground;
sf::Sprite spriteBackground;

sf::Text textStartGame;
sf::Text textContinueGame;
sf::Text textQuitGame;
sf::Text textOptions;

sf::RectangleShape optionSelector (sf::Vector2f(0,0));

unsigned int selectedOption;

sf::Music music;
}

#endif

所以在 main.cpp 中的超长函数调用中,我希望发生的是程序在 RenderWindow 对象窗口中寻找一个类,一个类...... 但是相反,函数调用引用了命名空间内的类函数,它还认为窗口在该命名空间中,因为编译返回 window was not declared in this scope 我认为这意味着 window was not declared在菜单命名空间中。

我应该如何告诉我的程序查看菜单命名空间之外的内容?

和平。

编辑 1:添加了所有 main.cpp 代码,不想添加,因为它是游戏的 future 代码,但它是如此简单,我不觉得没有人会窃取它。

最佳答案

windowmain 的本地变量。如果需要,将它传递给 loadMenu

关于c++ - 命名空间行为怪异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25296887/

相关文章:

kubernetes - 命名空间 "stuck"作为终止,我如何删除它

c++ - SFML - Opengl VAO 问题给我一个 (1282) 错误

c++ - 在 GCC 和 OS X 中使用 SFML 时遇到问题

C++ shared_ptr 和 memcpy 错误

c++ - 使用私有(private)变量初始化数组

c++ - 有没有标准的 Linux C++ 输入库可供使用?

python - 代码风格 - "flattening"包的命名空间

c++ - 就序列点而言,前置增量与后增量

c++ - 头文件和命名空间有什么区别?

c++ - 如何在 SFML C++ 中传递图像