2015-02-22 7 views
0

Everytime я бег кода он говоритПопытки использовать векторы с SFML

Vector subscript OUT of range. 

Я посмотрел на других SFML вектора Вопросов по «StackOverflow», и ни один из них не имеет ответа на мои вопросы или работали. То, что я пытаюсь сделать, это:

vector<sf::Sprite> snake_part; 

sf::Sprite sprite; 

for (int i = 0; i <= 10; --i) { 

    snake_part.push_back(sprite); 
    cout << "Vector size : " << snake_part.size() << endl; 
    snake_part[i].setTexture(Snake_Part_Texture); 

    if (i > 0) { 
     x1[i] -= 10; 
    } 
} 

Это часть кода, который не работает.

ВЫВОД:

Vector size : 1 
Vector size : 2 

Он должен рассчитывать на «10», но останавливается на «2» по какой-то причине, и приходит с «Вектор выхода за пределы» ошибки, а также.

Полный код:

#include <SFML/Graphics.hpp> 
#include <iostream> 
#include <vector> 

using namespace std; 

int main() { 
//========================================================= 

    // Coordinates 
    float y = 330; float x = 150; 
    float x1[10]; x1[0] = x; 
    float y1[10]; y1[0] = y; 

    // Texture 
    sf::Texture floorText; 
    if (!floorText.loadFromFile("Floor_Snake_SFML.png")) { 
     cout << "Floor_Snake_SFML.COULD_NOT_LOAD: [Error]" << endl; 
    } 
    sf::Texture Snake_Part_Texture; 
    if (!Snake_Part_Texture.loadFromFile("Snake_Part_Sprite.png")) { 
     cout << "Snake_Part_Texture.COULD_NOT_LOAD: [Error]" << endl; 
    } 

    // Sprite_floor 
    sf::Sprite floor; 
    floor.setTexture(floorText); 
    floor.setPosition(0, 320); 

    // vector <sprite> -- (snake) 
    vector<sf::Sprite> snake_part; 

    sf::Sprite sprite; 

    for (int i = 0; i <= 10; --i) { 

     snake_part.push_back(sprite); 
     cout << "Vector size : " << snake_part.size() << endl; 
     snake_part[i].setTexture(Snake_Part_Texture); 

     if (i > 0) { 
      x1[i] -= 10; 
     } 
    } 


    //========================================================= 
    sf::RenderWindow window(sf::VideoMode(640, 480), "<snake>"); 

    while (window.isOpen()) { 

     sf::Event event; 
     while (window.pollEvent(event)) { 

      switch (event.type) { 

      // Close Window 
      case sf::Event::Closed: 
       window.close(); 
       break; 

      // Do [x] if KeyPressed- 
      case sf::Event::KeyPressed: 

       switch (event.key.code) { 

       // [A] -pressed- 
       case sf::Keyboard::A: 

        for (int j = 1; j <= 10; j++) { 
         x1[j] = x1[j - 1]; y1[j] = y1[j - 1]; 
        } 

        x1[0] -= 10; 

        for (int k = 1; k <= 10; k++) { 
         snake_part[k].setPosition(x1[k], y1[k]); 
        } 

        break; 

       // [D] -pressed- 
       case sf::Keyboard::D: 



        break; 

       // [Space] -pressed- 
       case sf::Keyboard::Space: 

        break; 
       } 
       break; 
      } 
     } 

     window.clear(); // =============================== 

     window.draw(floor); 
     window.draw(snake_part[0]); 

     window.display(); // =============================== 
    } 

    return 0; 
} 

Если вы хотите получить более подробные ошибки и краткий обзор программы, просто комментарий, а также спасибо заранее, и если кто-нибудь знает лучший путь вместо вектора, чтобы создать 10 спрайтов без необходимо сделать это 10 раз:

sf::Sprite sprite; 
sprite.setTexture(texture); 
sprite.setTextureRect(sf::IntRect(0, 0, 10, 10)); 
float x = 320, y = 240; 
sprite.setPosition(x, y); 

тогда я был бы ДЕЙСТВИТЕЛЬНО благодарен.

-Спасибо заранее.

+0

Запуск в отладчике, он прекратится, когда произойдет исключение (или авария), и вы сможете изучить такие вещи, как значения переменных. Например, значение 'i' не будет действительным индексом. На самом деле, всякий раз, когда случается что-то неожиданное, и программа, кажется, крутится или заканчивается внезапно, тогда * всегда * старайтесь сначала найти это, используя отладчик. Отладчик входит в тройку лучших инструментов программирования рядом с компилятором и редактором. –

ответ

3

ошибка, скорее всего, происходит от этой линии:

for (int i = 0; i <= 10; --i) 

Я не знаю, что вы имели в виду делать с этой линией, но более чем вероятно, он должен был быть ++i вместо --i.

Смежные вопросы