Du bist nicht angemeldet.

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

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

11

19.05.2008, 22:53

Habe jetzt nicht den ganzen Thread gelesen, aber du füllst den Zeiger schon irgendwo noch, oder? - Also irgendwo solltest du noch ein

C-/C++-Quelltext

1
m_pGame = new CGame;
stehen haben..

Mist. Zu langsam. Aber btw:
Du musst den Speicher aber nachher auch wieder brav mit delete freigeben! ;)

12

19.05.2008, 23:10

Zitat

so, und wenn du nun dieses objekt erstellst wird es ddank deines konstruktors komplett genullt. d.h. das dein m_pGame-zeiger de facto zunächst ein mal ins nichts zeigt.

hab ich noch nicht darüber nachgedacht, aber klingt logisch! was unlogisch ist, ist dass der würfel-konstruktor genau gleich aufgebaut ist, es jedoch dort funktioniert, und ich wie gesagt von dort aus auch das ding rendern kann, auch den ball.

Zitat

folglich musst du doch nach dem erstellen des objektes der variablen m_pGame erstmal eine adresse zuweisen.


das hab ich dann mal in den konstruktor geschrieben, so wie drakon es empfohlen hat und genauso wie er es geschrieben hat. jedoch kommt dann:

"error C2512: 'CGame': Kein geeigneter Standardkonstruktor verfügbar"
der konstruktor von CGame ist genauso lausig:

C-/C++-Quelltext

1
inline CGame() {ZeroMemory(this, sizeof(CGame));}


sonst, wenn der konstruktor eurer ansicht nach keinen sinn macht, dann wird wohl ein neues buch benötigt, oder?

EDIT: wenn ich den konstruktor leer lasse, also das ZeroMemory weg lass, dann passiert genau das gleiche...

tnecniv

Treue Seele

Beiträge: 164

Wohnort: BERLIN

  • Private Nachricht senden

13

19.05.2008, 23:12

Zitat

Habe jetzt nicht den ganzen Thread gelesen, aber du füllst den Zeiger schon irgendwo noch, oder? - Also irgendwo solltest du noch ein

C-/C++-Quelltext

1
m_pGame = new CGame;

stehen haben..


hmm, ich denk mal nicht...
ich glaub eher, dass das Ball-Objekt in einer Game-Methode erstellt wird und dann dem objekt ein this-zeiger übergeben wird...

gruß

EDIT:

aaaaaaaaaaaah, warum zeigst du nicht einfach mal den code, wo du ein ball objekt erstellst!!! oder ein würfel objekt.. oder ALLES! langsdam werd ich ungeduldig.. :)
Sagt der igel zu dem dachs:
willst du größer sein, dann wachs!
- alte Fritz weisheit

14

19.05.2008, 23:16

jetzt versteh ich was du meintest! ja, das ballobjekt wird in CGame so erstellt:

C-/C++-Quelltext

1
CBall                       m_aBall[16];

, also so, wie du es gerade vermutet hattest. doch den this-zeiger kann ich noch nirgends finden...

tnecniv

Treue Seele

Beiträge: 164

Wohnort: BERLIN

  • Private Nachricht senden

15

19.05.2008, 23:20

daaaaanke!

schreib einfach noch in die Init()-methode von CGame:

C-/C++-Quelltext

1
2
for(int i=0; i<16; ++i)
m_aBall[i].m_pGame = this;


das ist nur nicht so fein, weil m_pGame public sein muss... eine lösung über den konstruktor wäre schöner...
Sagt der igel zu dem dachs:
willst du größer sein, dann wachs!
- alte Fritz weisheit

16

19.05.2008, 23:23

VIELEN DANK AN ALLE!!!

habs jetzt geschafft. wenn ich eine würfelreihe erstellt hatte, dann sah das immer so aus:

m_aBlock[iBlockNum].m_pGame = this;
m_aBlock[iBlockNum].m_vPosition = m_vStartPos;
....

wenn ich alle bälle gerendert hab, dann sah es so aus:

C-/C++-Quelltext

1
2
3
4
5
    for(DWORD dwBall = 0; dwBall < 16; dwBall++)
    {
        m_aBall[dwBall].m_pGame = this; // nur diese zeile hat gefehlt!

        m_aBall[dwBall].Render(fTime);
    }




Zitat

und dann dem objekt ein this-zeiger übergeben wird...

danke, das hat mich darauf gebracht! fiel nämlich auf, dass das bei den würfeln so gemacht wurde, beim ball jedoch nicht!
allein hätte ich wohl nie daran gedacht.

nochmals danke, das problem hat mich schon bestimmt 1 woche aufgehalten!
:lol: :D :D
*freu*

Werbeanzeige