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
PD
unregistriert
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
// Gibt einen bestimmten Manager wieder template <typename T> inline T * getManager(void) { // Temporäres Objekt des angeforderten Managers T manager_; // Durchlaufe alle Manager und gib den richtigen wieder. for (std::vector<manager*>::iterator i=m_managers.begin(); i!=m_managers.end(); ++i) { // Manager stimmt mit dem angeforderten Manager überein? if ((*i)->getID() == manager_.getID()) return (static_cast<T *>(*i)); } // Manager ist nicht vorhanden! Wir geben NULL zurück return (NULL); } // wird so aufgerufen: blub.getManager<keyboard>()->setKey('A'); |
PD
unregistriert
PD
unregistriert
C-/C++-Quelltext |
|
1 |
cObjm.GetObj<CGrafik>("CGrafik")->update(); |
C-/C++-Quelltext |
|
1 2 3 4 5 |
template <typename T> T *CObjectManager::GetObj(std::string com) { return static_cast<T*>(vpObject[GetIDbyComment(com)]); } |
Quellcode |
|
1 |
C:\Dokumente und Einstellungen\PQ\Desktop\Programmieren\The Labyrinth\mainclass.cpp(52) : error C2275: "CGrafik" : Ungültige Verwendung dieses Typs als Ausdruck |
PD
unregistriert
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
class manager { public: // Con- und Destructor manager (void) : m_id (0xFF000000) {}; virtual ~manager (void) {}; // Funktion gibt die ID des Managers wieder inline virtual int getID (void) { return (m_id); } // Hauptfunktionen der Manager virtual void restore (void) = 0; virtual void clear (void) = 0; virtual void update (void) = 0; protected: // ID des Managers int m_id; }; |
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 66 67 68 |
class keyboard : public manager { public: // Con- und Destructor keyboard (void); ~keyboard (void); // Funktion gibt die ID des Managers wieder inline virtual int getID (void) { return (m_id); } // ### Hauptfunktionen der Manager void restore (void); void clear (void); void update (void); // ### Nebenfunktionen dieses Managers // Setze die gedrückten und losgelassenen Tasten void setPressedKey (unsigned int key); void setReleasedKey (unsigned int key); // Welche Taste wurde/wird gedrückt? bool isPressed (unsigned int key); bool isReleased (unsigned int key); protected: // ID des Managers int m_id; // Speicherung der Tasten bool m_currKey[256]; bool m_oldKey[256]; }; keyboard::keyboard (void) : m_id (0xFF000001) { // Alles auf 'false' setzen restore (); } keyboard::~keyboard (void) { } void keyboard::restore (void) { // Durchlaufe alle Einträge und setze sie auf 'false'. for (int i=0; i<256; ++i) { m_oldKey[i] = m_currKey[i] = false; } } void keyboard::update (void) { // Aus neu mach alt für den nächsten Frame. :-D for (int i=0; i<256; ++i) { m_oldKey[i] = m_currKey[i]; } } void keyboard::clear (void) { restore (); } |
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 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 |
class management : public manager { public: // Con- und Destructor management (void); ~management (void); // Funktion gibt die ID des Managers wieder inline virtual int getID (void) { return (m_id); } // ### Hauptfunktionen der Manager void restore (void); void clear (void); void update (void); // ### Nebenfunktionen dieses Managers // Fügt einen Manager hinzu bool addManager(manager & manager_); // Gibt einen bestimmten Manager wieder template <typename T> inline T * getManager(void) { // Temporäres Objekt des angeforderten Managers T manager_; // Durchlaufe alle Manager und gib den richtigen wieder. for (std::vector<manager*>::iterator i=m_managers.begin(); i!=m_managers.end(); ++i) { // Manager stimmt mit dem angeforderten Manager überein? if ((*i)->getID() == manager_.getID()) return (static_cast<T *>(*i)); } // Manager ist nicht vorhanden! Wir geben NULL zurück return (NULL); } protected: // ID des Managers int m_id; private: std::vector <manager*> m_managers; }; management::management (void) : m_id (0xFFFFFFFF) { } management::~management (void) { } void management::restore (void) { // Durchlaufe alle Einträge und setze rufe die 'restore'-Funktion auf. for (std::vector<manager*>::iterator i=m_managers.begin(); i!=m_managers.end(); ++i) { (*i)->restore (); } } void management::clear (void) { // Durchlaufe alle Einträge und setze rufe die 'restore'-Funktion auf. for (std::vector<manager*>::iterator i=m_managers.begin(); i!=m_managers.end(); ++i) { (*i)->clear (); } } void management::update (void) { // Durchlaufe alle Einträge und setze rufe die 'restore'-Funktion auf. for (std::vector<manager*>::iterator i=m_managers.begin(); i!=m_managers.end(); ++i) { (*i)->update (); } } bool management::addManager(manager & manager_) { PUSH; // Guck nach ob Manager schon im Management vorhanden ist for (std::vector<manager*>::iterator i=m_managers.begin(); i!=m_managers.end(); ++i) { // Existiert Manager schon? if ((*i)->getID() == manager_.getID()) { // Warnung ins Log schreiben und Funktion beenden LOG << fm ("Der Manager ist bereits im Management enthalten!", WARNING); POP; return (false); } } // Manager ist noch nicht vorhanden, also rein damit und Funktion beenden m_managers.push_back(&manager_); POP; return (true); } |
PD
unregistriert
Werbeanzeige