DejaVu |
» 2014-06-23 22:21:41 |
|
qest43 Temat założony przez niniejszego użytkownika |
» 2014-06-23 23:01:55 Dodam wszystkie headery klas bo nie ma ich wiele: To jest main ---> #include <iostream> #include "InputManager.h" #include "ScreenManager.h" #include "allegro5\allegro_native_dialog.h" #pragma once
#include <allegro5\allegro.h> #include <allegro5\allegro_image.h> #include <allegro5\allegro_font.h> #include <string> #include "InputManager.h"
class Animation { public: Animation( void ); ~Animation( void ); virtual void LoadContent( ALLEGRO_BITMAP * image, std::pair < float, float > position ); virtual void UnloadContent(); virtual void Update( InputManager & input ); void Draw( ALLEGRO_DISPLAY * display ); void SetAlpha( float value ); float GetAlpha(); protected: ALLEGRO_BITMAP * image; std::pair < float, float > position; float alpha; };
#pragma once #include "Animation.h"
class FadeAnimation : public Animation { public: FadeAnimation( void ); ~FadeAnimation( void ); void LoadContent( ALLEGRO_BITMAP * image, std::pair < float, float > position ); void UnloadContent(); void Update( InputManager & input ); bool GetIsActive(); void SetIsActive( bool value ); private: float fadeSpeed; bool increase; bool isActive; };
#pragma once
#include <string> #include <vector> #include <fstream> #include <sstream> #include <iostream> #include <algorithm>
class FileManager { public: FileManager( void ); ~FileManager( void ); void LoadContent( const char * filename, std::vector < std::vector < std::string >> & contents, std::vector < std::string > & attributes ); private: std::vector < std::string > tempContents; };
#pragma once
#include <allegro5\allegro.h> #include "InputManager.h" #include "FileManager.h"
class GameScreen { protected: InputManager input; FileManager fileManager; std::vector < std::string > attributes; std::vector < std::vector < std::string >> contents; public: GameScreen(); ~GameScreen(); virtual void LoadContent(); virtual void UnloadContent(); virtual void Update( ALLEGRO_EVENT ev ); virtual void Draw( ALLEGRO_DISPLAY * display ); InputManager GetInput(); };
#pragma once
#include <allegro5\allegro.h> #include <allegro5\keyboard.h> #include <vector>
class InputManager { private: ALLEGRO_KEYBOARD_STATE keystate; public: InputManager( void ); ~InputManager( void ); void Update(); bool IsKeyPressed( ALLEGRO_EVENT ev, int key ); bool IsKeyPressed( ALLEGRO_EVENT ev, std::vector < int > keys ); bool IsKeyReleased( ALLEGRO_EVENT ev, int key ); bool IsKeyReleased( ALLEGRO_EVENT ev, std::vector < int > keys ); bool IsKeyDown( int key ); };
#pragma once
#include "ScreenManager.h" #include <vector> #include "FileManager.h" #include "InputManager.h" #include <sstream> #include <allegro5\allegro.h> #include <allegro5\allegro_image.h> #include <allegro5\allegro_font.h> #include <allegro5\allegro_ttf.h>
class MenuManager { private: FileManager fileManager; InputManager input; std::vector < std::string > attributes; std::vector < std::vector < std::string >> contents; ALLEGRO_BITMAP * image; ALLEGRO_FONT * font; std::vector < std::string > items; std::vector < std::pair < float, float >> position; std::vector < std::string > menuLinks; std::pair < float, float > newImageSize; std::pair < float, float > imageSize; int align; int active; int itemColor; int itemNumber; void SetItems(); public: MenuManager( void ); ~MenuManager( void ); void LoadContent( std::string idMenu ); void UnloadContent(); void Update( ALLEGRO_EVENT ev ); void Draw( ALLEGRO_DISPLAY * display ); };
#pragma once
#include "InputManager.h" #include <allegro5\allegro_font.h> #include <allegro5\allegro_ttf.h> #include "MenuManager.h"
class MenuScreen : public GameScreen { private: MenuManager menu; public: MenuScreen( void ); ~MenuScreen( void ); void LoadContent(); void UnloadContent(); void Update( ALLEGRO_EVENT ev ); void Draw( ALLEGRO_DISPLAY * display ); };
#pragma once
#include <iostream> #include <string> #include <map>
#include <allegro5\allegro.h> #include <allegro5\allegro_image.h> #include"GameScreen.h" #include "SplashScreen.h" #include "MenuScreen.h"
class ScreenManager { private: ScreenManager(); ScreenManager( ScreenManager const & ); void operator =( ScreenManager const & ); GameScreen * currentScreen; std::map < std::string, GameScreen *> screenDirectory; public: ~ScreenManager(); static ScreenManager & GetInstance(); void AddScreen( std::string newScreen ); void Initialize(); void LoadContent(); void UnloadContent(); void Update( ALLEGRO_EVENT ev ); void Draw( ALLEGRO_DISPLAY * display ); };
#pragma once
#include "ScreenManager.h" #include "InputManager.h" #include "FileManager.h" #include "FadeAnimation.h" #include <allegro5\allegro_font.h> #include <allegro5\allegro_ttf.h>
class SplashScreen : public GameScreen { private: ALLEGRO_FONT * font; std::vector < ALLEGRO_BITMAP *> images; FadeAnimation fadeAnimation; ALLEGRO_BITMAP * fadeImage; std::pair < float, float > position; int imageNumber; public: SplashScreen( void ); ~SplashScreen( void ); void LoadContent(); void UnloadContent(); void Update( ALLEGRO_EVENT ev ); void Draw( ALLEGRO_DISPLAY * display ); };
|
|
DejaVu |
» 2014-06-24 11:15:53 Rozrysuj sobie na kartce nazwy plików i strzałkami połącz który plik includuje jaki. Jeżeli w grafie pojawi się cykl to znaczy, że źle zaprojektowałeś zależności. |
|
qest43 Temat założony przez niniejszego użytkownika |
» 2014-06-25 14:22:29 Żaden cykl nie zachodzi: http://screenshooter.net/6815011/xmbaknn Strzałki oznaczają pliki które są dołączane.
Jedynie ScreenManager jest dodawany do MenuScreen, który zawiera MenuManager, a MenuManager zawiera ScreenManager. Ale to powinno działać. |
|
pekfos |
» 2014-06-25 17:40:19 Ja na tym rysunku widzę cykl. SplashScreen.h <-> ScreenManager.h. |
|
qest43 Temat założony przez niniejszego użytkownika |
» 2014-06-25 17:46:40 No to czemu to działało (błąd wystąpił dopiero po dodaniu screen managera). Poza tym obie muszą się nawzajem linkować, bo ScreenManager.h to singleton w którego metodzie są obiekty splash screena, a w SplashScreen.h jest funkcja ze ScreenManagera, statyczna bo to singleton. |
|
pekfos |
» 2014-06-25 17:48:23 No to czemu to działało (błąd wystąpił dopiero po dodaniu screen managera). |
Na moje oko, to właśnie wymieniłem ów nagłówek, jako element cyklu.. Poza tym obie muszą się nawzajem linkować |
W takim razie Twój projekt jest błędny. |
|
qest43 Temat założony przez niniejszego użytkownika |
» 2014-06-25 18:02:17 W singletonie ScreenManager są metody tworzące nowe obiekty okienek, dlatego każda klasa okienka musi być podlinkowana w ScreenManager. Natomiast klasa okienek, np. SplashScreen ma podlinkowany ScreenManager bo wywołuje on metodę statyczną która zmienia na inne okienko,usuwa dane itp. |
|
1 « 2 » 3 |