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

modyfikowanie sf::Vertex podczas pętli

Ostatnio zmodyfikowano 2020-09-17 17:55
Autor Wiadomość
BraveRat
Temat założony przez niniejszego użytkownika
modyfikowanie sf::Vertex podczas pętli
» 2020-09-15 22:25:27
Witam od kilku dni próbuję napisać kod dzięki któremu sf::Vertex rozpisanej klasy zmieniałby się nie naruszając reszty obiektu.
plik h:
C/C++
class Creature
    : public sf::Drawable
     , public sf::Transformable
{
public:
    sf::Texture parts;
    std::vector < sf::Vector2i > rects;
    int actualframe;
    sf::Clock creatureClock;
    void load( sf::Vector2u creatureSize, sf::Vector2i * rectMove, sf::Vector2i * partsMove, int parts, sf::Vector2i * rect, int * sides );
   
private:
   
    virtual void draw( sf::RenderTarget & target, sf::RenderStates states ) const
    {
        states.transform *= getTransform();
       
        states.texture = & parts;
       
        target.draw( vertices, states );
    }
   
    sf::VertexArray vertices;
   
};
plik cpp:
C/C++
void Creature::load( sf::Vector2u creatureSize, sf::Vector2i * rectMove, sf::Vector2i * partsMove, int parts, sf::Vector2i * rect, int * sides )
{
    vertices.setPrimitiveType( sf::Quads );
    vertices.resize( parts * 4 );
   
    for( unsigned int j = 0; j < parts; j++ )
    {
       
        sf::Vertex * quad = & vertices[ j * 4 ];
       
        quad[ 0 ].position = sf::Vector2f( partsMove[ j ].x + rectMove[ j ].x, partsMove[ j ].y + rectMove[ j ].y );
        quad[ 1 ].position = sf::Vector2f( partsMove[ j ].x + rect[ j ].x + rectMove[ j ].x, partsMove[ j ].y + rectMove[ j ].y );
        quad[ 2 ].position = sf::Vector2f( partsMove[ j ].x + rect[ j ].x + rectMove[ j ].x, partsMove[ j ].y + rect[ j ].y + rectMove[ j ].y );
        quad[ 3 ].position = sf::Vector2f( partsMove[ j ].x + rectMove[ j ].x, partsMove[ j ].y + rect[ j ].y + rectMove[ j ].y );
       
        quad[( 0 + sides[ j ] ) % 4 ].texCoords = sf::Vector2f( rectMove[ j ].x, rectMove[ j ].y );
        quad[( 1 +( sides[ j ] * - 1 ) ) % 4 ].texCoords = sf::Vector2f( rectMove[ j ].x + rect[ j ].x, rectMove[ j ].y );
        quad[( 2 + sides[ j ] ) % 4 ].texCoords = sf::Vector2f( rectMove[ j ].x + rect[ j ].x, rectMove[ j ].y + rect[ j ].y );
        quad[( 3 +( sides[ j ] * - 1 ) ) % 4 ].texCoords = sf::Vector2f( rectMove[ j ].x, rectMove[ j ].y + rect[ j ].y );
    }
}
I w mainie:
C/C++
sf::Vector2i rectMove[] =
{
    sf::Vector2i( 12, 0 ), sf::Vector2i( 70, 166 ), sf::Vector2i( 0, 76 ), sf::Vector2i( 70, 76 ), sf::Vector2i( 70, 1 ),
};
sf::Vector2i partsMove[] =
{
    sf::Vector2i( 59, 9 ), sf::Vector2i( 0, - 7 ), sf::Vector2i( 65, 6 ), sf::Vector2i( 0, 0 ), sf::Vector2i( 0, 8 ),
};
sf::Vector2i rect[] =
{
    sf::Vector2i( 58, 76 ), sf::Vector2i( 62, 108 ), sf::Vector2i( 70, 102 ), sf::Vector2i( 59, 88 ), sf::Vector2i( 62, 75 ),
};
int sides[] =
{
    0, 0, 0, 0, 0,
};
Creature Hero1;
Hero1.parts.loadFromFile( "Hero1.png" );
Hero1.load( sf::Vector2u( 255, 274 ), rectMove, partsMove, 5, rect, sides );
Hero1.setPosition( 800, 200 );

Hero1.actualframe = 0;

Hero1.rects.resize( 9 );
Hero1.rects.push_back( sf::Vector2i( 70, 166 ) );
Hero1.rects.push_back( sf::Vector2i( 0, - 7 ) );
Hero1.rects.push_back( sf::Vector2i( 62, 108 ) );

Hero1.rects.push_back( sf::Vector2i( 132, 166 ) );
Hero1.rects.push_back( sf::Vector2i( - 62, - 7 ) );
Hero1.rects.push_back( sf::Vector2i( 62, 108 ) );

Hero1.rects.push_back( sf::Vector2i( 194, 166 ) );
Hero1.rects.push_back( sf::Vector2i( - 124, - 7 ) );
Hero1.rects.push_back( sf::Vector2i( 61, 88 ) );

//...

if( sf::Keyboard::isKeyPressed( sf::Keyboard::W ) )
{
   
    if( Hero1.creatureClock.getElapsedTime().asSeconds() >= 0.12 )
    {
        Hero1.creatureClock.restart();
        sf::Vector2i rectMove[] =
        {
            sf::Vector2i( 12, 0 ), Hero1.rects[ Hero1.actualframe +( Hero1.actualframe * 3 ) ], sf::Vector2i( 0, 76 ), sf::Vector2i( 70, 76 ), sf::Vector2i( 70, 1 ),
        };
        sf::Vector2i partsMove[] =
        {
            sf::Vector2i( 59, 9 ), Hero1.rects[( Hero1.actualframe +( Hero1.actualframe * 3 ) ) + 1 ], sf::Vector2i( 65, 6 ), sf::Vector2i( 0, 0 ), sf::Vector2i( 0, 8 ),
        };
        sf::Vector2i rect[] =
        {
            sf::Vector2i( 58, 76 ), Hero1.rects[( Hero1.actualframe +( Hero1.actualframe * 3 ) ) + 2 ], sf::Vector2i( 70, 102 ), sf::Vector2i( 59, 88 ), sf::Vector2i( 62, 75 ),
        };
       
        if( Hero1.actualframe < 4 )
        {
           
            int sides[] =
            {
                0, 0, 0, 0, 0
            };
        }
        else if( Hero1.actualframe >= 4 )
        {
           
            int sides[] =
            {
                0, 1, 0, 0, 0
            };
           
        }
    }
    Hero1.load( sf::Vector2u( 255, 274 ), rectMove, partsMove, 5, rect, sides );
    Hero1.actualframe =( Hero1.actualframe + 1 ) % 6;
}
Zawsze gdy kompiluje albo nie dzieje się nic albo nogi znikają. Chciałbym żeby od actualframe == 4 animacja wyglądała tak jak do actualframe == 3 tyle że z obróconym dołem.
P-177549
pekfos
» 2020-09-16 20:18:10
C/C++
Hero1.rects.resize( 9 );
Hero1.rects.push_back( sf::Vector2i( 70, 166 ) );
Hero1.rects.push_back( sf::Vector2i( 0, - 7 ) );
Hero1.rects.push_back( sf::Vector2i( 62, 108 ) );

Hero1.rects.push_back( sf::Vector2i( 132, 166 ) );
Hero1.rects.push_back( sf::Vector2i( - 62, - 7 ) );
Hero1.rects.push_back( sf::Vector2i( 62, 108 ) );

Hero1.rects.push_back( sf::Vector2i( 194, 166 ) );
Hero1.rects.push_back( sf::Vector2i( - 124, - 7 ) );
Hero1.rects.push_back( sf::Vector2i( 61, 88 ) );
Wiesz że tworzysz tu 18 elementów? 9 przez resize() i 9 przez push_back().

C/C++
sf::Vector2i( 12, 0 ), Hero1.rects[ Hero1.actualframe +( Hero1.actualframe * 3 ) ], sf::Vector2i( 0, 76 ), sf::Vector2i( 70, 76 ), sf::Vector2i( 70, 1 ),
};
Na pewno powinno tu być 4 * Hero1.actualframe?

C/C++
if( Hero1.actualframe < 4 )
{
   
    int sides[] =
    {
        0, 0, 0, 0, 0
    };
}
else if( Hero1.actualframe >= 4 )
{
   
    int sides[] =
    {
        0, 1, 0, 0, 0
    };
   
}
To niczego nie robi.
P-177552
BraveRat
Temat założony przez niniejszego użytkownika
» 2020-09-16 21:11:27
Zauważyłem dziwną zależność. Jeśli nie napiszę o czymś na forum to za nic nie zauważę w czym problem i dopiero po zrobieniu z siebie durnia widzę ten prosty błąd. Jeśli ktoś chciałby zrobić coś takiego to podaje kod który działa.
C/C++
if( sf::Keyboard::isKeyPressed( sf::Keyboard::W ) )
{
   
    if( Hero1.creatureClock.getElapsedTime().asSeconds() >= 0.13 )
    {
        Hero1.creatureClock.restart();
        switch( Hero1.actualframe )
        {
        case 0:
            rectMove[ 1 ] = sf::Vector2i( 132, 166 );
            partsMove[ 1 ] = sf::Vector2i( - 62, - 7 );
            rect[ 1 ] = sf::Vector2i( 62, 108 );
            sides[ 1 ] = 0;
            break;
        case 1:
            rectMove[ 1 ] = sf::Vector2i( 194, 166 );
            partsMove[ 1 ] = sf::Vector2i( - 124, - 7 );
            rect[ 1 ] = sf::Vector2i( 61, 88 );
            sides[ 1 ] = 0;
            break;
        case 2:
            rectMove[ 1 ] = sf::Vector2i( 70, 166 );
            partsMove[ 1 ] = sf::Vector2i( 0, - 7 );
            rect[ 1 ] = sf::Vector2i( 62, 108 );
            sides[ 1 ] = 0;
            break;
        case 3:
            rectMove[ 1 ] = sf::Vector2i( 132, 166 );
            partsMove[ 1 ] = sf::Vector2i( - 62, - 7 );
            rect[ 1 ] = sf::Vector2i( 62, 108 );
            sides[ 1 ] = 1;
            break;
        case 4:
            rectMove[ 1 ] = sf::Vector2i( 194, 166 );
            partsMove[ 1 ] = sf::Vector2i( - 124, - 7 );
            rect[ 1 ] = sf::Vector2i( 61, 88 );
            sides[ 1 ] = 1;
            break;
        case 5:
            rectMove[ 1 ] = sf::Vector2i( 70, 166 );
            partsMove[ 1 ] = sf::Vector2i( 0, - 7 );
            rect[ 1 ] = sf::Vector2i( 62, 108 );
            sides[ 1 ] = 1;
            RuthieGriffiths.actualframe = - 1;
            break;
        }
        Hero1.load( sf::Vector2u( 255, 274 ), rectMove, partsMove, 5, rect, sides );
        Hero1.actualframe++;
    }
}
Za chęci pomocy dziękuję
P-177553
pekfos
» 2020-09-17 17:55:40
Zauważyłem dziwną zależność. Jeśli nie napiszę o czymś na forum to za nic nie zauważę w czym problem i dopiero po zrobieniu z siebie durnia widzę ten prosty błąd.
https://en.wikipedia.org/wiki​/Rubber_duck_debugging
P-177554
« 1 »
  Strona 1 z 1