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
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
bool Sprite_Aktiv; if(Leertase == gedrückt && Sprite_Aktiv == false) { //Sprite erstellen und initialisieren Sprite_Aktiv = true; } else if(Leertaste == gedrückt && Sprite_Aktiv == true) { //Sprite löschen Sprite_Aktiv = false; } |
Ergebnis: Die if-Anweisung wird tausend mal ausgeführt und beim zweiten mal stürtzt das Programm ab.
Zitat
Was genau meinst du damit?
Zur Not könntest du mithilfe sf:leep(time); ne Wartezeit einbauen.
Zitat
Zu allererst, würde ich den Sprite nicht jedesmal neu erstellen, sondern nur 1 mal und ihn entweder Rendern oder eben nicht Rendern!
Erstellt du jedesmal einen neuen bool? Wenn ja, ist er nach jedem Frame wieder false (oder true) den auch nur 1 mal erstellen!
Community-Fossil
Zur Not könntest du mithilfe sf:leep(time); ne Wartezeit einbauen.
Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »NachoMan« (12.02.2012, 12:46)
Zitat
In einer solchen Situation solltest du nach jedem delete den Zeiger auf NULL setzen(außer im Destruktor natürlich)
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 |
CSprite::~CSprite() { delete(pSprite); pSprite = NULL; delete(pTexture); pTexture = NULL; } |
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 |
if(Leertaste == gedrückt && !Stopit) { Stopit = true; if(!Sprite_Aktiv) { // Sprite Rendern SpriteAktiv = true; } else if (Sprite_Aktiv) { // Sprite nicht Rendern bzw. einfach nix tun Sprite_Aktiv= false; } } else if (Leertaste == nicht gedrückt && Stopit) { Stopit = false; } |
Community-Fossil
Ich setze aber eig. Immer im Destruktor ein Delete und dannach den Zeiger auf NULL, was ist verkehrt daran?
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
if(Leertaste == gedrückt) { if(!Stopit) { Stopit = true; // von Rendern auf nicht rendern und anders herum umschalten. Sprite_Aktiv = !Sprite_Aktiv; } } else { Stopit = false; } |
Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »NachoMan« (12.02.2012, 17:05)
Zitat
Der Zeiger wird nach dem Destruktoraufruf sowieso nichtmehr genutzt. Du verschwendest also nur Zeit.
Werbeanzeige