2017-05-03 4 views
0

ceci est un code qui crée un jeu de poulet envahisseurs, le jeu (ou quelle partie je peux faire du jeu) a bien fonctionné Quand j'étais juste en train d'initialiser un poulet, mais quand je l'ai fait un tableau 2d de poulets, il m'a montré cette erreur.THREAD 1: EXC_BAD_ACCESS erreur, cette erreur apparaît à la fonction de poignée dans le fichier cpp à la première ligne

RenderWindow window; 
int main(int, char const**) 
{ 
    chicken chick[4][7]; 
    Sprite back; 
    Clock clock; 
    window.create(VideoMode(1800, 1000), "Menu"); 

    while (window.isOpen()) 
    { 
     Event event; 
     while (window.pollEvent(event)) 
     { 
      if (event.type == Event::KeyPressed && event.key.code == Keyboard::Escape) 
       window.close(); 

      if (event.type == Event::Closed) 
       window.close(); 

     } 

     Texture texture; 
     if (!texture.loadFromFile(resourcePath() + "background.jpg")) 
     { 
      std::cout << "Error loading texture" << std::endl; 
     } 

     Time time; 
     time = clock.getElapsedTime(); 
     if (time.asSeconds() >= 0.001) 
     { 
      chick[4][7].handle(window, clock); 
      clock.restart(); 
     } 


     window.clear(); 
     back.setTexture(texture); 
     back.setPosition(0, 0); 
     back.setTextureRect(IntRect(0, 0, 1800, 1000)); 
     window.draw(back); 
     for (int i = 0; i < 4; i++) 
      for (int j = 0; j < 7; j++) 
       chick[i][j].initialize(window); 
     window.display(); 
    } 
} 
/////////////////// 
this is the app file for the chicken class 
using namespace sf; 
class chicken 
{ 
private: 
    RectangleShape chick; 
    bool flag; 
public: 
    chicken(); 
    void initialize(RenderWindow &window); 
    void handle(RenderWindow & window, Clock clock); 
    ~chicken(); 
}; 
#endif /* chicken_hpp */ 
///////////////////////////////////////////////////////////// 
this is the cpp file for the chicken class 
using namespace sf; 

chicken::chicken() 
{ 
    chick.setPosition(500, 500); 
    chick.setSize(Vector2f(200, 200)); 
    chick.setOrigin(100, 100); 
    flag = true; 
} 
void chicken::initialize(RenderWindow & window) 
{ 
    Texture texture2; 
    if (!texture2.loadFromFile(resourcePath() + "chicken3.jpg")) 
    { 
     std::cout << "Error loading texture" << std::endl; 
    } 
    chick.setTexture(&texture2); 
    window.draw(chick); 
} 

void chicken::handle(RenderWindow & window, Clock clock) 
{ 
    if (flag) //the error appears here 
    { 
     chick.move(10 , 0) ; 
    } 
    else 
    { 
     chick.move(-10 , 0); 
    } 
    if (chick.getPosition().x >= window.getSize().x) 
     flag = false; 

    if(chick.getPosition().x < 0) 
     flag = true; 
} 
chicken::~chicken() 
{ 

} 
+1

Où est l'erreur? Veuillez inclure le message d'erreur complet dans votre question. – Eddge

Répondre

0

À l'avenir, s'il vous plaît inclure l'intégralité du message d'erreur dans votre question, mais la question est ici que vous accédez à un index sur des limites dans votre tableau de poulet.

taille de votre tableau est 4x7 cela signifie que votre indices valides sont 0 - 3 et 0 - 6.

Votre fonction poignée est appelé poussin [4] [7], qui est hors des limites.

Si vous essayez d'appeler cette fonction uniquement le dernier poussin dans le tableau, il serait

chick[3][6].handle(window, clock); 

pour appeler sur chaque poulet que vous avez besoin d'une double boucle comme

for(int i = 0; i < 4; ++i) 
{ 
    for(int j = 0; j < 7; ++j) 
    { 
     chick[i][j].handle(window, clock); 
    } 
}