Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!
Werbeanzeige
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
#pragma once #include "gamestate\include\GameState.hpp" #include "gamestate\states\include\MainMenuState.hpp" class GameState; class Options : public GameState { public: Options(); ~Options(); void Update(sf::Time deltatime, Game &game) override; void ProcessEvents(Game &game) override; void Render(sf::RenderWindow &App) override; public: bool m_bPlayMusic, m_bShowFPS; bool m_bClicked; float m_fMusicVolume; private: sf::Texture Background_Texture; sf::Sprite Background_Sprite; sf::Text txtPlayMusic; sf::Text txtShowFPS; sf::Text txtMusicVolume_static; sf::Text txtMusicVolume_variable; sf::Text txtPageUP_PageDOWN; sf::Font font; private: void loadBackground(); void setTextes(); }; |
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 |
#pragma once #include <SFML\Graphics.hpp> #include <memory> #include <iostream> #include "gamestate\include\GameState.hpp" class GameState; class MainMenuState; class PlayState; class LevelOneState; class Options; class Game { public: enum class gameStates{MAINMENU, PLAY, OPTIONS, LEVELONE}; Game(); ~Game(); void Run(); // Run kümmert sich um den Ablauf und dem Erhalt des Spieles void changeState(gameStates newState); // operator für sf::RenderWindow, damit man es auch in andere Klassen benutzen kann sf::RenderWindow& operator[] (int index) { switch (index) { case 0: return App; break; default: break; } } public: sf::RenderWindow App; private: void Update(sf::Time deltatime); void HandleEvents(); void Render(); void UpdateStatistics(sf::Time elapsedTime); private: static const sf::Time TimePerFrame; bool m_bPause; // statics sf::Font mFont; sf::Text mStatisticsText; sf::Time mStatisticsUpdateTime; std::size_t mStatisticsNumFrame; std::unique_ptr<GameState> CurrentState; Options options; // Hier wird die Instanz erstellt! }; |
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
if (options.m_bShowFPS == true) { if (mStatisticsUpdateTime >= sf::seconds(1.0f)) { mStatisticsText.setString( "Frames / Second = " + std::to_string(mStatisticsNumFrame) + "\n" + "Time / Update = " + std::to_string(mStatisticsUpdateTime.asMicroseconds() / mStatisticsNumFrame) + "us"); mStatisticsText.setColor(sf::Color::Red); mStatisticsUpdateTime -= sf::seconds(1.0f); mStatisticsNumFrame = 0; } } |
Das hatte ich schon gemacht (Hätte ich vllt erwähnen sollen)In der Game.cpp ein include "Options.h"
Zitat
In Memberfunktion auf Membervariablen aus einer anderen Klasse zugreifen
Community-Fossil
Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer
Was in diesem Fall natürlich Käse ist, dot, weil er ja eine Klasse Options hat, die nichts weiter tun soll als Settings-Variablen zu halten und bereitzustellen.
Das ist nichts weiter als stupide Datenhaltung.
Natürlich ist dort der Zugriff auf Member direkt sinnvoll.
Statt aber auch mal in einem Topic einen konkreten Hinweis zu geben, was er eigentlich ändern soll, bringst Du immer wieder dieselben Sprüche. Wie wär's denn mal zur Abwechslung, wenn Du eine konkrete Lösung anbieten würdest?
Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »dot« (21.08.2015, 02:22)
Community-Fossil
Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer
Richtig, aber das war gar nicht Teil der Fragestellung des Topics.Aus irgendeinem Grund hat diese Klasse aber auch Sprites, Texturen, Fonts und eine Render-Methode...
Was allerdings voraussetzt, dass diese Komponente zu diesem Zeitpunkt überhaupt existiert, was sehr fragwürdig und vermutlich gar nicht der Fall ist. Außerdem frage ich mich, wo diese Info also geladen und gespeichert werden soll, wenn es keine Klasse geben sollte, die diese Informationen persistieren und laden kann. Diese wäre effektiv ja nur ein Datencontainer. Ob man den Zugriff da über definierte Indices macht oder über direkte Member, das ist dabei ja erstmal egal und hängt auch vom verwendeten Serialisierungs- oder Persistierungsframework ab. Wie genau würdest Du ohne so eine Klasse oder so ein Framework denn die Information dauerhaft speichern?Nope. Sinnvoll wäre es, eine separate Klasse rein für das Settings GUI zu haben, welches dann, z.B. über einen Mediator, beim entsprechenden anderen Objekt, welches sich um die Darstellung der FPS kümmert, die showFPS() bzw. hideFPS() Methoden aufruft...
Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von »BlueCobold« (21.08.2015, 06:53)
Richtig, weil ich in der Options-Klasse auch Text darstellen will und (später) ein Hintergrund hinzufügen möchte.Aus irgendeinem Grund hat diese Klasse aber auch Sprites, Texturen, Fonts und eine Render-Methode...
Währe es an dieser Stelle sinnvoll den fstream (#include <fstream>) zu verwenden, also die Variablen in einer Datei zu speichern?Außerdem frage ich mich, wo diese Info also geladen und gespeichert werden soll
Werbeanzeige