• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

SFML menu i klasa gry

0 głosów
771 wizyt
pytanie zadane 11 marca 2018 w C i C++ przez zpawlo00 Początkujący (310 p.)

W jaki sposób mógłbym dodać menu do klasy gry tak by przy wlaczaniu programu pokazywało sie menu, a gdy wybiorę opcję np Play to włączy sie okno gry?

#pragma once
#include <SFML\Graphics.hpp>

#define MAX_NUMBER_OF_ITEMS 3


class Menu
{
public:
	Menu(float width, float heigth);
	~Menu();

	void draw(sf::RenderWindow &window);
	void MoveUp();
	void MoveDown();

private:
	int selectedItemIndex;
	sf::Font font;
	sf::Text menu[MAX_NUMBER_OF_ITEMS];

};

#include "Menu.h"
#include <SFML\Graphics.hpp>

#define WIDTH 900
#define HEIGTH 950

Menu::Menu(float width, float heigth)
{
	if (!font.loadFromFile("font.otf"))
	{
		
	}
	menu[0].setFont(font);
//	menu[0].setColor(sf::Color::White);
	menu[0].setString("Play");
	menu[0].setPosition(sf::Vector2f(WIDTH / 2, HEIGTH / (MAX_NUMBER_OF_ITEMS + 1) * 1));

	menu[1].setFont(font);
	//menu[1].setColor(sf::Color::White);
	menu[1].setString("Exit");
	menu[1].setPosition(sf::Vector2f(WIDTH / 2, HEIGTH / (MAX_NUMBER_OF_ITEMS + 1) * 2));


}



void Menu::draw(sf::RenderWindow &window)
{
	for (int i = 0; i < MAX_NUMBER_OF_ITEMS; i++)
	{
		window.draw(menu[i]);
	}
}

#pragma once
#include <SFML\Graphics.hpp>
#include "TPlayer.h"
#include "TBlocks.h"


#define WIDTH 900
#define HEIGTH 950

class TGame
{
public:

	TGame(TPlayer *player_, TBlocks *block_);

	void run();
	
protected:
	enum GameState { MENU, GAME, GAME_OVER, END };

private:
	void processEvents();
	void update_game();
	void render();
	void checkCollision();
	
	sf::RenderWindow mWindow;
	TPlayer * player;
	TBlocks * block;
	sf::Font font;
	void menu();

};

#include "TGame.h"
#include "TBlocks.h"
#include "Collision.h"
#include <SFML\Graphics.hpp>\

#define WIDTH 900
#define HEIGTH 950




TGame::TGame(TPlayer * player_, TBlocks * block_ ) : player(player_), block(block_), mWindow(sf::VideoMode(WIDTH, HEIGTH), "GAME") 
{
	mWindow.setFramerateLimit(60);

	
}


void TGame::run()
{
	while (mWindow.isOpen())
	{
		processEvents();
		update_game();
		render();
	}
}

void TGame::processEvents()
{
	sf::Event event;
	while (mWindow.pollEvent(event))
	{
		if (event.type == sf::Event::Closed)
			mWindow.close();
		break;
	}
}


void TGame::render()
{
	mWindow.clear();

	mWindow.draw(*block);
	mWindow.draw(*player);
	block->update_block();
	player->update();


	mWindow.display();
}

void TGame::update_game()
{
	

}


/*
void TGame::checkCollision() 
{
	if (Collision::PixelPerfectTest(player, block))
	{
		mWindow.close();
	}

}
*/


 

1 odpowiedź

0 głosów
odpowiedź 11 marca 2018 przez Sebastian1107 Początkujący (350 p.)
Zrób np. void render(RenderWindow &win) i wklasie menujak wywolujesz render(window).
komentarz 11 marca 2018 przez zpawlo00 Początkujący (310 p.)
edycja 11 marca 2018 przez zpawlo00

Chodzi o coś takiego?

void Menu::draw(sf::RenderWindow &window)
{
	for (int i = 0; i < MAX_NUMBER_OF_ITEMS; i++)
	{
		window.draw(menu[i]);
	}
}

 

komentarz 11 marca 2018 przez Sebastian1107 Początkujący (350 p.)
tak
komentarz 11 marca 2018 przez zpawlo00 Początkujący (310 p.)
Tylko jak teraz "podłączyć: to pod klase gry?

Podobne pytania

+1 głos
2 odpowiedzi 808 wizyt
pytanie zadane 6 marca 2018 w C i C++ przez zpawlo00 Początkujący (310 p.)
0 głosów
2 odpowiedzi 490 wizyt
0 głosów
2 odpowiedzi 1,363 wizyt
pytanie zadane 10 kwietnia 2018 w C i C++ przez Damian.W Początkujący (320 p.)

93,600 zapytań

142,524 odpowiedzi

322,993 komentarzy

63,085 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Kursy INF.02 i INF.03
...