2017-11-28 3 views
2

wator 시뮬레이션은 물고기를 먹는 상어였습니다. 무작위로 상어를 산다면, 프로그램이 컴파일되지만 "Vertical Sync is not supported"가 나타납니다.SFML Vertical Sync가 지원되지 않습니다.

우분투에서 작업하기 16.04. 전에 다른 일을하고 있었는데 같은 오류가 발생했지만 창은 표시되지 않았습니다. 어떤 도움이 필요합니까?

편집 내가 내 루프에서 너무 많은 일 { 있었지만 지금은 무엇입니까 코드까지 해결 한 오류가 난 8 비트하지만 didnt 한 도움말을 내 PNG을 변경 한 "분할 오류 (코어 덤프)".

#include <SFML/Graphics.hpp> 



int main() 
{ 
    int n; 
    int x; 
    int y; 

    sf::RenderWindow window(sf::VideoMode(800, 800), "SFML works!"); 
// Set Frame Rate to 60fps 
    window.setFramerateLimit(60); 

    srand(time(0)); 

    sf::Texture shark; 
    shark.loadFromFile("image.png"); 
    std::vector<sf::Sprite> Fishes(n,sf::Sprite(shark)); 
    for (int n = 0; n < Fishes.size(); n++){ 
     Fishes[n].setOrigin(15, 15); 
     Fishes[n].getPosition(); 
     Fishes[n].setPosition(x = rand() % 790 + 10, y = rand() % -10 - 50); 
    } 

    // run the program as long as the window is open 
    while (window.isOpen()) 
    { 
     // check all the window's events that were triggered since the last iteration of the loop 
     sf::Event event; 
     while (window.pollEvent(event)) 
     { 
      // "close requested" event: we close the window 
     if (event.type == sf::Event::Closed) 
       window.close(); 
     } 

     Fishes[n].setPosition(x, y+=1); 
      Fishes[n].rotate(1); 

      // clear the window with black color 
      window.clear(sf::Color::Black); 

      // draw everything here... 
      // window.draw(...); 
      window.draw(Fishes[n]); 

      // end the current frame 
      window.display(); 
     } 

     return 0; 
} 
+0

루프 변수는 'i'이지만 전역 변수 인'n'을 사용합니다. 이 'n'을 다시 사용하여 렌더링에서 완벽한 루프가 누락되었습니다. 나는 당신이 당신의 논리를 곧바로 이해해야한다고 말하고 싶습니다. 좋은 생각은 전역을 전혀 none으로 제한하는 것입니다. v-sync는 아마도 경고 일 뿐이며 일단 프로그램을 수정하면 프로그램이 잘 작동합니다. – nvoigt

+0

나는 그것을 가지고있어 ... 나는'{'너무 많은 것을 가지고있다 –

+0

나는 새로운 오류 –

답변

0

아직 렌더링 루프에서 물고기 위에 반복문이 없습니다.

첫 번째 루프는 귀하의 마지막 물고기 다음에 루프 변수 을 에 설정합니다. 동일한 루프 변수 을 다시 사용하면이 정의되지 않은 동작을합니다. 고쳐야입니다. 두 번째로 n을 사용하는 다른 for 루프를 while 렌더링 루프에 추가하면 가능합니다. 특히

,이 라인에 와서 :

Fishes[n].setPosition(x, y+=1); 

당신 변수 n하지 루프 변수의 종류이다. 더 나쁜 것은 완전히 무작위이며, 어떤 가치도 설정하지 않았습니다. main() 다음의 첫 번째 줄에있는 것은 int n;입니다. 해당 줄을 삭제하면 (메인 이후 첫 번째 줄), 틀린 것을 볼 수 있습니다.

+0

로 내 대답을 업데이트했다. 당신이 의미하는 바를 이해하지 못하는 코드 예제를 추가 할 수 있겠는가? –

0

댓글을 달았지만 평판이 부족합니다. segfault는 불법 메모리 쓰기 또는 읽기로 인해 발생합니다. 귀하의 경우에는 이미지가 올바르게로드되고 있는지 확인하려고합니다.

본문에서 한 줄만 사용하는 루프에 대해서도 하나의 중괄호를 사용하지 마십시오. 둘 다 사용하거나 전혀 사용하지 마십시오.