c++ - 尝试将 vector 与 SFML 一起使用

标签 c++ vector sfml

每次我运行它说的代码

Vector subscript OUT of range.

我看过关于“stackoverflow”的其他 SFML vector 问题,但没有一个能回答我的问题或有效。我想做的是:

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”,并且还出现“vector 下标超出范围”错误。

完整代码:

#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;
}

如果您想要更详细的错误和程序概要,请发表评论,也在此先感谢,如果有人知道更好的方法而不是 Vector 来创建 10 个 Sprites 而无需执行此操作 10 次:

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

那我将不胜感激。

-提前致谢。

最佳答案

错误很可能来自这一行:

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

我不知道你打算用那行做什么,但很可能它应该是 ++i 而不是 --i

关于c++ - 尝试将 vector 与 SFML 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28654567/

相关文章:

javascript - OpenLayers 3 中的自定义矢量形状标记

c++ - 调用了虚函数,使用了父函数

c++ - 支持 CSS3 的 C/C++ CSS 解析器?

c++ - 单行注释延续

c++ - C++ 中的多键自定义排序

C++ Sprite 不显示 - 也没有错误

c++ - 在类(class)中如何访问类(class)成员指向的地址?

C++:free():下一个大小无效(快速)

c++ - 模板元编程 Eigen 表达式

c++ - 从 C++ 中的非原始对象 vector 中删除所有匹配元素