2017-07-07 1 views
-1

Ich machte ein SFML-Spiel, und ich wollte die Anzahl der Kugeln, die gleichzeitig auf dem Bildschirm existieren können, auf 5 begrenzen.Sprites zeigen nicht an, wie ich sie anzeigen lassen soll

Dies ist der minimale Code benötigt:

#define max_bullets_displayed 5 

//... 

Bullet* pociski[max_bullets_displayed]; 

//... 

for (int i = 0; i < 5; i++) 
{ 
    pociski[i] = 0; 
} 

//... 

//creating bullets when needed 
if (sf::Mouse::isButtonPressed(sf::Mouse::Left)) 
{ 
    for (int i = 0; i < 5; i++) 
    { 
     if (pociski[i] == 0) 
     { 
      pociski[i] = new Bullet("pocisk.png", sf::Mouse::getPosition().x, sf::Mouse::getPosition().y, 23, 20); 
     } 
    } 
} 

//... 

//displaying 
for (int i = 0; i < 5; i++) 
{ 
    if (pociski[i] != 0) window.draw(pociski[i]->sprite); 
} 

Ich denke, es ist etwas falsch mit den Zeigern ist. Nur eines der Geschosse kann angezeigt werden, der Rest wird auch nach dem Klicken nicht angezeigt. Es werden keine Ausnahmen ausgelöst und der Speicher ist in Ordnung.

+0

Zunächst einmal haben Sie ein Speicherleck. Sie müssen die Objekte löschen, die Sie mit 'new' erstellt haben. Andere als diese Bitten bezweifeln, was genau Sie Problem ist. Was ist falsch und was hast du erwartet? –

+0

Ich muss die Objekte nicht löschen, die neu erstellt wurden, weil ich sie nur auf maximal 5 beschränkte, und auch die Objekte werden gelöscht, wenn das Geschoss auf etwas trifft. @ K.Kirsz – IMakeBestGameCrashes

+0

Ok, Sie spawnen alle Kugeln in der gleichen Position, oder? Sind sie nicht einfach übereinander gezeichnet? –

Antwort

0

Alle Kugeln werden in der gleichen Position erzeugt, also sind sie übereinander gezeichnet.

pociski[i] = new Bullet("pocisk.png", sf::Mouse::getPosition().x, sf::Mouse::getPosition().y, 23, 20); 
Verwandte Themen