Müssen die Klassen per new erstellt werden?
-
Hallo! Ich bastel an einer 2D Karte und bin mir nicht sicher, reicht es eine karte dann so zu erstellen:
Tile medium[128][128];
?
Muss ich da gar nichts mit new machen? Aufgrund einiger merkwürder Fehler glaube ich nämlich das es bisher nur Zufall war das alles ging.
-
der code ist ok, brauchst kein new.
new braucht man eigentlich nur selten.
-
Ne, brauchst kein new. Ohne new wird es auf dem Stack (innerhalb einer Funktion) oder im Datensegment abgelegt.
-
Ok dann ein wenig Code:
class Tile { public: Tile(){ SourceRec.left = 0; SourceRec.top = 0; SourceRec.right = 32; SourceRec.bottom = 32; }; bool SetTexture(int number); IDirectDrawSurface7 **texture; /* Bild mit verschiedenen tiletexturen */ bool walkable; RECT SourceRec; /* welchen Bereich von der Quelle blitten */ RECT DestRec; /* in welchen bereich in das ziel blitten? */ }; bool Tile::SetTexture(int number) { if(texture) { switch(number) { case 1: SourceRec.left = 0; SourceRec.right = 32; walkable = true; break; case 2: SourceRec.left = 34; SourceRec.right = 66; walkable = false; break; case 3: SourceRec.left = 68; SourceRec.right = 102; walkable = true; break; case 4: SourceRec.left = 104; SourceRec.right = 136; walkable = true; break; case 5: SourceRec.left = 138; SourceRec.right = 170; walkable = true; break; case 6: AfxMessageBox("Drinne"); // Test ob es klappt SourceRec.left = 172; SourceRec.right = 204; walkable = true; break; default: return(0); } return(1); } else return(0); } [cpp] Nun will ich die Textur ändern: [cpp] void Editor::PlaceTexture(int x, int y) { int position_x = ((x/32) + worldposition_x); int position_y = ((y/32) + worldposition_y); if(grass) // Momentan nur gras zur auswahl... { AfxMessageBox("Ok"); medium[y][x].SetTexture(6); } }
Wie oben geschrieben klappt Settextur nur wenn das Tile eine Textur besitzt, und bei der Initaliserung der Karte wird defintiv eine Textur, sprich ein bmpFile zugewiesen.
Will ich jetzt nachträglich wieder per SetTexture() die Textur ändern, kommt die
AfxMessageBox("Drinne"); Nachricht unter case 6: nicht.Klammere ich die Bedingung if(texture) aus dann gehts.
Also muss texture ja irgendwie wieder NULL oder 0 geworden sein, nur wird das im Programm nirgends gesetzt, daher dachte ich das hängt damit zusammen das ich kein new verwende.
Was meint ihr? Ich hoffe das war verständlich