Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

vector subscript out of range

Ostatnio zmodyfikowano 2020-07-07 10:23
Autor Wiadomość
BraveRat
Temat założony przez niniejszego użytkownika
vector subscript out of range
» 2020-07-06 23:47:09
Witam to znowu ja. Próbowałem przerobić w sfml'u klasę na mapę kafelkową na taką rysującą max 5 obrazków (z jednej tekstury).
C/C++
class Bushes
    : public sf::Drawable
     , public sf::Transformable
{
public:
   
    bool load( const std::string & name, sf::Vector2u size, sf::Vector2f position1, sf::Vector2f position2, sf::Vector2f position3, sf::Vector2f position4, sf::Vector2f position5, int count, sf::Vector2f rectMove ) //W obrazku są jeszcze inne modele a rectMove działa jak dwie pierwsze wartości IntRect
    {
        if( !m_tileset.loadFromFile( name ) )
             return false;
       
        if( count >= 6 )
             return false;
       
        m_vertices.setPrimitiveType( sf::Quads );
        m_vertices.resize( 4 );
       
        sf::Vector2f currentPosition;
        for( unsigned int i = 0; i < count; ++i )
        {
            switch( count )
            {
            case 0:
                currentPosition = position1;
                break;
            case 1:
                currentPosition = position2;
                break;
            case 2:
                currentPosition = position3;
                break;
            case 3:
                currentPosition = position4;
                break;
            case 4:
                currentPosition = position5;
                break;
            }
            sf::Vertex * quad = & m_vertices[ 4 ];
           
            quad[ 0 ].position = sf::Vector2f( currentPosition.x, currentPosition.y );
            quad[ 1 ].position = sf::Vector2f(( size.x + currentPosition.x ), currentPosition.y );
            quad[ 2 ].position = sf::Vector2f(( size.x + currentPosition.x ),( size.y + currentPosition.y ) );
            quad[ 3 ].position = sf::Vector2f( currentPosition.x,( size.y + currentPosition.y ) );
           
            quad[ 0 ].texCoords = sf::Vector2f( rectMove.x, rectMove.y );
            quad[ 1 ].texCoords = sf::Vector2f( size.x, rectMove.y );
            quad[ 2 ].texCoords = sf::Vector2f( size.x, size.y );
            quad[ 3 ].texCoords = sf::Vector2f( rectMove.x, size.y );
        }
       
        return true;
    }
   
private:
   
    virtual void draw( sf::RenderTarget & target, sf::RenderStates states ) const
    {
        states.transform *= getTransform();
       
        states.texture = & m_tileset;
       
        target.draw( m_vertices, states );
    }
   
    sf::VertexArray m_vertices;
    sf::Texture m_tileset;
};
i w mainie'e
C/C++
Bushes bushes1;
if( !bushes1.load( "bushes.png", sf::Vector2u( 205, 219 ), sf::Vector2f( 0, 0 ), sf::Vector2f( 0, 300 ), sf::Vector2f( 300, 0 ), sf::Vector2f( 300, 300 ), sf::Vector2f( 0, 0 ), 4, sf::Vector2f( 0, 0 ) ) )
     return - 1;

Po poróbie uruchomienia wyrzuca błąd z nagłówka (w nowym oknie jeśli to istotne). Gdzie popełniłem błąd?
P-177311
pekfos
» 2020-07-07 06:15:57
Przekraczasz zakres wektora.
C/C++
m_vertices[ 4 ] // TU
P-177312
BraveRat
Temat założony przez niniejszego użytkownika
» 2020-07-07 10:23:35
Ok dzięki za pomoc i cierpliwość
P-177313
« 1 »
  Strona 1 z 1