Lieg ich wohl mit meiner Vermutung richtig =) Ich lege dir zu herzen die sache mit den Zeiger nochmal ein wenig anzugucken..
Folgendes:
Du hast in der klasse CGame einen Zeiger auf CPlayer.. m_pPlayer. Dann erstellst du per new eine neue Instanz der Klasse und speicherst die Adresse auf diese INstanz in deinem Zeiger...
Was du jetzt glaubst:
Wenn du irgendwo ganz anderes (in dem Fall CAstroid) einen zweiten Zeiger des Types CPlayer* erstellst heißt das nicht automatisch das dieser auf die gleiche Adresse zeigt wie das Orginal. Das sind komplett zwei unterschiedliche Variablen und dein zweiter Zeiger zeigt irgendwo hin je nach dem was gerade im Speicher steht.. aber nicht dahin wo du willst...
Auch das neu erstellen von CPlayer im neuen Zeiger wird nichts nützen weil du dann zwei verschiedene Instanzen im Speicher hast...
Mein Vorschlag:
Füge der Init funktion der Astroiden noch einen Parameter den du Level nennst... zusätzlich noch einen privaten int (oder float) den du m_Speed nennen kannst...
Nun berechnest du beim erstellen des Astroiden die Geschwindigkeit die er haben sollte (also in der INIT funktion) und speicherst dies in m_Speed ab...
Die Move funktion des Astroiden änderst du so ab das der Astroid jeweils um m_Speed fortbewegt wird..
In etwa so:
Die Init Funktion des Astroiden:
|
C-/C++-Quelltext
|
1
2
3
4
|
void CAstroid::Init(int Level) {
if(Level==1) m_Speed=15;
if(Level==2) m_Speed=17;
//.... besser eine switch abfrage oder allgemeine formel (m_Speed=Level*5)
|
Der Astroid wird ja in CGames erstellt... da hast du auch den richtigen Zeiger zum CPlayer deshalb kannst du dort einfach zur Init funktion das m_pPlayer->GetLevel() einbauen
Kannst du mir folgen? =/