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

question-closed SFML Zmiana na Fullscreen Przyspiesza prawie całą grę

VPS Starter Arubacloud
+1 głos
128 wizyt
pytanie zadane 5 stycznia 2020 w C i C++ przez Jakub Chomicz 1 Użytkownik (840 p.)
zamknięte 5 stycznia 2020 przez Jakub Chomicz 1

Witam otóż mam problem obecnie robię menu do gry i kiedy w pliku zmieniam z okna na fullscreen wszystko ładnie działa ale kiedy tylko zmieniam w menu z okna na fullscreen to automatycznie moja gra zaczyna się robić szybsza :( (chodzenie skakanie i tym podobne) ma ktoś może pomysł o co może chodzić ?

Poniżej daję kod do .cpp i .h proszę o szybką pomoc :(

#include "MainMenu.h"

void MainMenu::NewGame()
{
	sound.stop();
	states->push(new LoadingScreen(window, states));
}

void MainMenu::LoadGame()
{
	sound.stop();
	states->push(new LoadingScreen(window, states));
}

void MainMenu::Settings()
{
	Options = true;
}

void MainMenu::Extras()
{

}

void MainMenu::QuitGame()
{
	MainMenu::window->close();
}

void MainMenu::Back()
{
	Options = false;
}

void MainMenu::SetWindowState()
{
	if (WindowState == 0)
	{
		window->create(VideoMode(1280, 720), "Black 'N' White", Style::Close);
	}

	if (WindowState == 1)
	{
		window->create(VideoMode(1280, 720), "Black 'N' White", Style::None);
	}
	if (WindowState == 2)
	{
		window->create(VideoMode(1280, 720), "Black 'N' White", Style::Fullscreen);
	}
}

MainMenu::MainMenu(RenderWindow* window, stack<State*>* states) : State(window,states)
{
	WindowState = 0;
	Options = false;
	size = 3600;
	for (int i = 0; i < size; i++)
	{
		rain.insert(rain.end(), Rain());
	}
	StateB = 1;
	c = 0;
	CanFade = false;
	Octin.loadFromFile("Stuff/Fonts/octin stencil rg.ttf");
	Bgt.loadFromFile("Stuff/Images/BackGround1.png");
	Bg.setTexture(Bgt);
	Bg.setPosition(0, 0);
	Bg.setColor(Color(155,155,155,155));
	txt = new TexT(window->getSize().x/2,window->getSize().y/8,Octin, Color(255, 255, 255, 255), "Black 'N' White", 48);
	SoundTrack.loadFromFile("Stuff/Audio/SoundTrack1.wav");
	ButtonHover.loadFromFile("Stuff/Audio/ButtonHover1.wav");
	ButtonClick.loadFromFile("Stuff/Audio/ButtonClick1.wav");
	Hover.setBuffer(ButtonHover);
	Click.setBuffer(ButtonClick);
	Hover.setVolume(40);
	sound.setBuffer(SoundTrack);
	sound.play();
	sound.setLoop(true);
	ButtonOnWindowX = window->getSize().x / 8;
	BPx = window->getSize().x / 8;
	//Menu
	b1 = new Button1(BPx, window->getSize().y / 2-80,"New Game", 1,StateB); buttons.push_back(b1);
	b1 = new Button1(BPx, window->getSize().y / 2-40,"Load Game", 2,StateB); buttons.push_back(b1);
	b1 = new Button1(BPx, window->getSize().y / 2,"Settings", 3, StateB); buttons.push_back(b1);
	b1 = new Button1(BPx, window->getSize().y / 2+40,"Extras", 4, StateB); buttons.push_back(b1);
	b1 = new Button1(BPx, window->getSize().y / 2+80,"Quit Game", 5, StateB); buttons.push_back(b1);
	//Settings
	b1v2 = new Button1(BPx, window->getSize().y / 2 - 80, "< Back", 1, StateB); buttons2.push_back(b1v2);
	b1v2 = new Button1(BPx, window->getSize().y / 2 - 40, "Resolution", 2, StateB); buttons2.push_back(b1v2);
	b1v2 = new Button1(BPx, window->getSize().y / 2, "Windowed", 3, StateB); buttons2.push_back(b1v2);
	b1v2 = new Button1(BPx, window->getSize().y / 2 + 40, "Music Valume", 4, StateB); buttons2.push_back(b1v2);
	b1v2 = new Button1(BPx, window->getSize().y / 2 + 80, "Audio Valume", 5, StateB); buttons2.push_back(b1v2);
	Fade.setPosition(Vector2f(0.0f, 0.0f));
	Fade.setSize(Vector2f(window->getSize().x,window->getSize().y));
}

MainMenu::~MainMenu()
{
	for(auto& b1 : buttons)
		delete b1;
}

void MainMenu::EndState()
{
	
}

void MainMenu::Collisions()
{

}

void MainMenu::Events(Event ev)
{
	if (ev.type == Event::KeyReleased)
	{
		if (Keyboard::Escape == ev.key.code)
		{
			
			
		}
		if (Keyboard::W == ev.key.code || Keyboard::Up == ev.key.code)
		{
			StateB--;
			Hover.play();
		}
		if (Keyboard::S == ev.key.code || Keyboard::Down == ev.key.code)
		{
			StateB++;
			Hover.play();
		}
		if(Options == false)
		{
			for (auto& b1 : buttons)
			{
				if (Keyboard::Enter == ev.key.code && b1->CanClick)
				{
					Click.play();
					switch (StateB)
					{
					case 1:
						CanFade = true;
						Action = 1;
						break;
					case 2:
						CanFade = true;
						Action = 2;
						break;
					case 3:
						Change = true;
						break;
					case 4:
						CanFade = true;
						Action = 4;
						break;
					case 5:
						CanFade = true;
						Action = 5;
						break;
					default:
						break;
					}
				}
			}
		}
		else
		{
			for (auto& b1v2 : buttons2)
			{
				if (Keyboard::Enter == ev.key.code && b1v2->CanClick)
				{
					Click.play();
					switch (StateB)
					{
					case 1:
						Change = 1;
						break;
					case 2:
						Action = 2;
						break;
					case 3:
						Action = 3;
						break;
					case 4:
						Action = 4;
						break;
					case 5:
						Action = 5;
						break;
					default:
						break;
					}
				}
			}
		}
	}
}

void MainMenu::UpdateKeys(const float& dt)
{

}

void MainMenu::Update(const float& dt)
{
	Fade.setFillColor(Color(0, 0, 0, c));
	if (Change)
	{
		if (BPx < -160)
		{
			if (Options == false)
			{
				StateB = 1;
				Action = 3;
			}
			else
			{
				StateB = 3;
				Action = 1;
			}
			Change = false;
		}
		else
		{
			BPx-= 10;
		}
	}
	else
	{
		if (BPx < ButtonOnWindowX)
		{
			BPx += 10;
		}
	}
	if (Options == false)
	{
		if (c > 254)
		{
			switch (Action)
			{
			case 1:
				NewGame();
				break;
			case 2:
				LoadGame();
				break;
			case 4:
				Extras();
				break;
			case 5:
				QuitGame();
				break;
			default:
				break;
			}
		}
		if (Action == 3)
		{
			Settings();
			Action = 0;
		}
	}
	else
	{
		switch (Action)
		{
		case 1:
			Back();
			break;
		case 2:
			LoadGame();
			break;
		case 3:
			if (WindowState < 2)
				WindowState++;
			else
				WindowState = 0;
			SetWindowState();
			Action = 0;
			break;
		case 4:
			Extras();
			break;
		case 5:
			QuitGame();
			break;
		default:
			break;
		}
	}
	if (CanFade)
	{
		c++;
	}
	else
	{
		if (c > 0)
		{
			c--;
		}
	}
	if (StateB > 5)
	{
		StateB = 1;
	}
	if (StateB < 1)
	{
		StateB = 5;
	}
	for (int i = 0; i < size; i++)
	{
		rain[i].Update(0,0, dt);
	}
	if (Options == false)
	{
		for (auto& b1 : buttons)
		{
			b1->UpdatePos(BPx, dt);
			b1->Update(StateB, dt);
		}
	}
	else
	{
		for (auto& b1v2 : buttons2)
		{
			b1v2->UpdatePos(BPx,dt);
			b1v2->Update(StateB, dt);
		}
	}
}

void MainMenu::Render(RenderTarget* target)
{
	target->draw(Bg);
	for (int i = 0; i < size; i++)
	{
		rain[i].Render(target);
	}
	if (Options == false)
	{
		for (auto& b1 : buttons)
		{
			b1->Render(target);
		}
	}
	else
	{
		for (auto& b1v2 : buttons2)
		{
			b1v2->Render(target);
		}
	}
	txt->Render(target);
	target->draw(Fade);
}
#pragma once
#include "State.h"
#include "LoadingScreen.h"
#include "Button1.h"
#include "Rain.h"
class MainMenu : public State
{
private:
	int WindowState;
	int BPx;
	int ButtonOnWindowX;
	int size;
	TexT* txt;
	vector<Rain> rain;
	Texture Bgt;
	Sprite Bg;
	int c;
	int Action;
	RectangleShape Fade;
	SoundBuffer SoundTrack;
	Sound sound;
	SoundBuffer ButtonHover;
	Sound Hover;
	SoundBuffer ButtonClick;
	Sound Click;
	RectangleShape Background;
	Button1* b1;
	Button1* b1v2;
	vector<Button1*> buttons;
	vector<Button1*> buttons2;
	bool Change;
	bool Options;
	bool CanFade;
	int WithOne;
	int StateB;
	//Menu
	void NewGame();
	void LoadGame();
	void Settings();
	void Extras();
	void QuitGame();
	//Settings
	void Back();
	void SetWindowState();
protected:
	Font Octin;
public:
	MainMenu(RenderWindow* window, stack<State*>* states);
	virtual ~MainMenu();
	void EndState();
	void Collisions();
	void Events(Event ev);
	void UpdateKeys(const float& dt);
	void Update(const float& dt);
	void Render(RenderTarget* target = nullptr);
};

 

komentarz zamknięcia: Rozwiązane
komentarz 5 stycznia 2020 przez Jakub Chomicz 1 Użytkownik (840 p.)
Już Problem Rozwiązany wystarczyło przy każdym tworzeniu okna ustawić FrameRateLimit

Podobne pytania

0 głosów
2 odpowiedzi 421 wizyt
pytanie zadane 5 kwietnia 2016 w C i C++ przez Patryk Krajewski Nałogowiec (26,170 p.)
0 głosów
0 odpowiedzi 125 wizyt
pytanie zadane 11 lipca 2020 w C i C++ przez HitMan Użytkownik (850 p.)
0 głosów
2 odpowiedzi 812 wizyt
pytanie zadane 15 stycznia 2017 w C i C++ przez Alvancaran Dyskutant (8,160 p.)

92,455 zapytań

141,263 odpowiedzi

319,099 komentarzy

61,854 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.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...