TeCe
Erfahrenes Mitglied
Hi...
Bei diesem Thema fällt es mir leider schwer mich gezielt auszudrücken - aber ich versuch's mal so gut ich kann:
Ich habe für einen openGL-TestContainer einen SceneManager, der je nach abgelaufener Zeit zwischen den Scenen wechseln soll.
Das habe ich vorher per
geregelt...da es aber immer mehr Szenen werden und die Spaghettis im code immer länger werden, habe ich mich für ein Stückchen mehr Dynamik entschieden.
Nun hat der SceneManager einen <vector> der die verschiedenen Szenen halten soll:
CScene ist also die parent-class { mit den Kon-/Destruktor, Basis-Attributen und Methode play(GLfloat speed)} für alle szenen.
Nun sollte doch also per
Eine Instanz von CScene1 im scenes-vector stecken!?
Stattdessen erstellt er nur eine Instanz von der parent-class CScene...
Die Methode CSceneMan:
lay() polymorph für jede einzelne Szene zu gestalten wäre doch schwachsinnig, da kann man ja gleich bei der alten Spaghetti-Methode bleiben...
Bei diesem Thema fällt es mir leider schwer mich gezielt auszudrücken - aber ich versuch's mal so gut ich kann:
Ich habe für einen openGL-TestContainer einen SceneManager, der je nach abgelaufener Zeit zwischen den Scenen wechseln soll.
Das habe ich vorher per
Code:
include "sceneman.h"
CSceneMan::CSceneMan(CTexMan *tex)
{
dured = 0.0f;
this->m_tex = tex;
sc1 = new CScene1(m_tex);
sc2 = new CScene2(m_tex);
sc3 = new CScene3(m_tex);
sc4 = new CScene4(m_tex);
sc5 = new CScene5(m_tex);
}
CSceneMan::~CSceneMan(void)
{
delete sc1;
delete sc2;
delete sc3;
delete sc4;
delete sc5;
}
void CSceneMan::play(GLfloat speed) {
dured += speed;
if(dured<sc1->duration) {
sc1->play(speed);
} else if(dured<sc1->duration+sc2->duration) {
sc2->play(speed);
} else if(dured<sc1->duration+sc2->duration+sc3->duration) {
sc3->play(speed);
} else if(dured<sc1->duration+sc2->duration+sc3->duration+sc4->duration) {
sc4->play(speed);
} else if(dured<sc1->duration+sc2->duration+sc3->duration+sc4->duration+sc5->duration) {
sc5->play(speed);
} else {
dured = 0.0f;
}
}
Nun hat der SceneManager einen <vector> der die verschiedenen Szenen halten soll:
Code:
void CSceneMan::add(CScene scn) {
scenes.push_back(scn);
}
CScene ist also die parent-class { mit den Kon-/Destruktor, Basis-Attributen und Methode play(GLfloat speed)} für alle szenen.
Nun sollte doch also per
Code:
scene_manager->add(CScene1(m_tex));
Stattdessen erstellt er nur eine Instanz von der parent-class CScene...
Die Methode CSceneMan:
