2017-05-03 4 views
0

이것은 닭 침략자 게임을 만드는 코드입니다. 게임 (또는 게임에서 내가 할 수있는 모든 부분)이 정상적으로 작동했습니다. 나는 닭 한 개를 초기화 할 때 닭을 2 차원 배열로 만들었을 때이 오류를 보였다.스레드 1 : EXC_BAD_ACCESS 오류입니다.이 오류는 첫 줄에있는 cpp 파일의 핸들 함수에 나타납니다.

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

경우처럼 루프에 대한 이중 필요한 모든 닭에 전화를하는 것입니다 오류입니까? 귀하의 질문에 전체 오류 메시지를 포함하십시오. – Eddge

답변

0

앞으로는 전체 오류 메시지를 질문에 포함 시키십시오. 그러나 여기서 문제는 치킨 배열의 범위를 벗어나는 인덱스에 액세스하는 것입니다. 3 - 0 - 6

내 핸들 기능 [4] [7] 범위 외에있는 병아리 호출되고

어레이의 크기는이 유효한 인덱스 0을 의미 4x7이다. 당신이 배열의 마지막 여자에 그 함수를 호출하려는 경우

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

당신이

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