Otóż, napisałem Arcanoid w SFML, Gra działa, wszystko fajnie, Menu też, wejscie z Menu do Gry też fajnie działa, niestety mam problem jak chce wyjść z gry do Menu, nagle nakłada się na obraz z gry obraz z Menu i działaja jednocześnie gra i menu. Dodam, że ręcznie debugowałem wszystko co zwiazane z grą i działa, metoda if_lose()
też działa, bo debugowałem w konsoli wypisywaniem czy przegrałem, czy nie. Jednak nie potrafię przejść z Gry do czegokolwiek, czy to Menu, czy jakieś okno wyświetlające porażkę.
void Game::run_menu()
{
Event menu_event, game_event;
while (state == MENU_STATE)
{
while (window->pollEvent(menu_event))
{
menu1->MoveDown();
menu1->MoveUp();
if (menu_event.type == Event::Closed || menu_event.type == Event::KeyPressed && menu_event.key.code == Keyboard::Escape)
{
this->state = END_STATE;
window->clear(Color::Black);
}
else if (menu1->give_selected_item() == 2 && menu_event.type == Event::KeyPressed && menu_event.key.code == Keyboard::Space)
{
this->state = END_STATE;
window->clear(Color::Black);
}
if (menu_event.type == Event::KeyPressed && menu_event.key.code == Keyboard::Space && menu1->give_selected_item() == 0)
{
this->state = PLAY_STATE;
while (state == PLAY_STATE)
{
if (menu_event.type == Event::KeyPressed && menu_event.key.code == Keyboard::Escape)
{
this->state = MENU_STATE;
window->clear(Color::Black);
}
engine1.game();
if (engine1.if_lose())
{
// tutaj chciałbym zaimplementować okno informujące o score i porażce
}
}
}
}
}
menu1->draw(*window);
window->display();
}
To całkowicie nie działa :
if (menu_event.type == Event::KeyPressed && menu_event.key.code == Keyboard::Escape)
{
this->state = MENU_STATE;
window->clear(Color::Black);
}
Jeszcze część klasy Engine.h
biorącej znaczny udział :
void Engine::game()
{
paddle_engine.update(window_engine->getSize().x);
ball_engine.up_velocity_bounce(window_engine->getSize().x, window_engine->getSize().y);
ball_engine.update();
collision_test(paddle_engine, ball_engine);
for (auto& brick : bricks) if (collisionTest(brick, ball_engine)) break;
auto iterator = remove_if(begin(bricks), end(bricks), [](Block& brick) {return brick.isDestroyed(); });
bricks.erase(iterator, end(bricks));
draw();
}
void Engine::draw()
{
window_engine->clear();
for (auto& brick : bricks)
window_engine->draw(brick);
window_engine->draw(paddle_engine);
window_engine->draw(ball_engine);
window_engine->display();
}