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);
тогда я был бы ДЕЙСТВИТЕЛЬНО благодарен.
-Спасибо заранее.
Запуск в отладчике, он прекратится, когда произойдет исключение (или авария), и вы сможете изучить такие вещи, как значения переменных. Например, значение 'i' не будет действительным индексом. На самом деле, всякий раз, когда случается что-то неожиданное, и программа, кажется, крутится или заканчивается внезапно, тогда * всегда * старайтесь сначала найти это, используя отладчик. Отладчик входит в тройку лучших инструментов программирования рядом с компилятором и редактором. –