Различные окна в проекте игры.

SFML и C++ Уроки \ Разработка игр Форумы SFML Graphics Различные окна в проекте игры.

В этой теме 2 ответа, 2 участника, последнее обновление MicroSDA MicroSDA 3 года/лет, 5 мес. назад.

Просмотр 3 сообщений - с 1 по 3 (из 3 всего)
  • Автор
    Сообщения
  • #733

    Nikit_K
    Участник
    Сообщений:8

    Зарегистрирован:
    25.04.2015

    Репутация:0

    Здравствуйте! В проекте игры должно быть меню, из которого я могу попасть в игру, в Help,Credits and Quit. Это меню я реализую в консоли приложения(ввод 1 для старта, ввод 2 для хелпа и тд. Через scanf я выбираю какая цифра введена, запускаю через if else нужное окно. Вопрос – как закрыть такое окно, но не закрывать проект? Тоесть мне нужно посмотреть хелп, покопаться в авторах, потом поиграть и выйти через quit. Как это делается?

    #734
    +1
    MicroSDA
    MicroSDA
    Участник
    Сообщений:64

    Зарегистрирован:
    24.04.2015

    Репутация:22

    Создай класс Гейм меню. В нем реализуй меню. Создай индекс выбора относительно которого ты и будешь запускать те или иные вещи. В общем цикле спрашивай с каким индексом ты вышел из класса меню и грузи то что тебе нужно . При нажатии Esc заходи опят в класс и там выбирай то что тебе надо. Рисуй меню внутри класса пусть он принимает силку на хендл окна &window. Пусть твой главный метод  в классе меню выгляди так.

    private:
    sf::Image image;
    sf::Texture texture;
    sf::Sprite sprite;
    int index = 0;
    итд…

    public:
    int MenuUpdate(RenderWIndow &window)
    {
    while (window.isOpen)
    {

    if (Keyboard::isKeyPressed(Keyboard::Up){index –; while (keyboard::isKeyPressed(Keyboard::Up){//Для паузы! можешь по своему это реализовать.//Цикл пустой.}}
    if (Keyboard::isKeyPressed(Keyboard::Down){index ++;while (keyboard::isKeyPressed(Keyboard::Up){//Для паузы! можешь по своему это реализовать.//Цикл пустой.}}
    if (index < 0){ index = 0;}
    if (index > MaxElementMenu///Максимальное количество пунктов меню ){index = MaxElementMenu;}

    if(index == чему тебя надо)
    //Тут рисуй свое меню относительно индекса// я к примеру крашу элементы меню в разный цвет. К примеру выбранное в красный а все остальное в белый.

    if(Keyboard::isKeyPressed(Keyboard::Return){return index;//выходим с нужным индексом }

    //И как вышли уже на основе индекса делаем то что надо. То ли заходим в новое меню то ли чтонить ещё.
    }

    }

    Надеюсь помог.

    #735
    +1
    MicroSDA
    MicroSDA
    Участник
    Сообщений:64

    Зарегистрирован:
    24.04.2015

    Репутация:22

    В принципе ты возможно делаешь также. Если ты хочешь закрыть окно меню и при это не закрыть основное окно игры то создай новое окно и новый обработчик для него (RenderWindow windowPlay. итд…) и закрывай уже его.

    Создай цикл внутри цикла:

    while(window.isOpen)

    {

    //Тут обработчик твоего меню

     

    while(window.isOpen)

    {

    //Тут игра

    if(Keyboard::isKeypressed(Keyboard::Esc){ break;// вылетаем из основного цикла в тот что выше, то есть там где меню }

    }

    }

    Не пойму зачем тебе отдельные окна (Рендить новое окно все же ресурсо емко)

    У меня была игра в которой я так реализовывал меню и прыгал по циклам в зависимости от того что я делал.

     

Просмотр 3 сообщений - с 1 по 3 (из 3 всего)

Для ответа в этой теме необходимо авторизоваться.