Не пойму в чем проблема, работа с while()
файл main.cpp
#include "menu.h"
using namespace sf;
int main() {
bool isGame = true;
bool isg = true;
while (game.isOpen()) {
while (isg) {
while (isGame) {
...
if (y > 500) {
isGame = false;
Menu(game, score);
break;
}
...
}
isGame = true;
}
}
return 0;
}
файл menu.h
#pragma once
#ifndef _MENU_H
#define _MENU_H
#include <SFML/Graphics.hpp>
#include <SFML/Audio.hpp>
#include <iostream>
#include <Time.h>
using namespace sf;
void Menu(RenderWindow& game,int score) {
bool isMenu = true;
while (isMenu) {
if (Mouse::isButtonPressed(Mouse::Left)) {
if (menuNum == 1) {
isMenu = false;
}
}
}
}
#endif _MENU_H
По-моей задумке, когда объект опускается ниже 500 единиц, вызывается функция void Menu(). Затем, если я хочу сыграть снова, в данном случае вот это условие `
if (Mouse::isButtonPressed(Mouse::Left)) {
if (menuNum == 1) {
isMenu = false;
}
` То я просто выхожу из цикла ф-ии void Menu() и возвращаюсь в первоначальный цикл. Но, при этом ничего не происходит, но по задумке -- затем выхожу из самого "глубокого" цикла в файле main, ставлю переменной true и обратно захожу в самый "глубокий" цикл. Извините если замучал этим текстом, мне кажется что ошибка лежит на поверхности, но я никак не могу до этого додуматься
Ответы (1 шт):
В данном случае нужно какое-либо совместно используемое хранилище, которое бы позволило получать значение как из одной функции, так и из другой. А так же какой-либо механизм переключения с одной функции на другую.
Хранить общие ресурсы можно в глобальных переменных, промежуточных классах или статических классах. Для примера можно взять последний, должно выглядеть как-то так:
MySettings.cpp
class MySettings
{
private:
static bool isGame;
public:
static bool getIsGame() { return isGame; }
static void setIsGame(bool status) { isGame = status; }
};
bool MySettings::isGame = true;
Дальше подключаем наш файл к menu.h. Теперь надо разобраться с тем, что между функциями надо переключаться. Для этого лучше поместить код из main в отдельную функцию и убрать прямой вызов Menu.
void RenderGame(){
while (MySettings::getIsGame()) {
...
if (y > 500) {
MySettings::setIsGame(false);
break;
}
...
}
}
int main() {
while(game.isOpen()){
if(MySettings::getIsGame()){
renderGame();
} else {
Menu(game, score);
}
}
return 0;
}
Ну и меню поменять из этого же условия.
void Menu(RenderWindow& game,int score) {
bool isMenu = true;
while (isMenu) {
if (Mouse::isButtonPressed(Mouse::Left)) {
if (menuNum == 1) {
MySettings::setIsGame(true);
break;
}
}
}
}