Witam. Ponownie mam problem.
Stworzyłem sobie klasę pudelka, w której utworzyłem kontener
vector na pudła(sprity) i funkcję
stworz, której głównym zadaniem jest tworzenie pudeł na współrzędnych, które podam (obiekt.stworz( x, y ).
class pudelka
{
public:
vector < sf::Sprite > pudla;
sf::Texture tekstura_pudla;
sf::Sprite pudlo;
void stworz( int pudlo_x, int pudlo_y )
{
tekstura_pudla.loadFromFile( "Grafika/pudlo.png" );
pudlo.setTexture( tekstura_pudla );
pudlo.setPosition( pudlo_x, pudlo_y );
pudla.push_back( pudlo );
}
};
Tworze je np. tak:
pudla_obiekt.stworz( 100, 100 );
pudla_obiekt.stworz( 200, 100 );
Okej, jak już wyjaśniłem jak to działa to mój problem jest taki. Jeśli wystrzele pocisk i kolizja==true to używam erase,które powoduje wywalanie pudeł od miejsca w kontenerze, które podam w górę, czyli jesli podam 0, a mam pudla na miejscach 0 i 1, to wywala oba.( o to chodzi, to jest złe, ma wywalać tylko jedno pudło, te podane przez "i")
Sprawdzanie kolizji wygląda tak:
for( int i = 0; i < pudla_obiekt.pudla.size(); i++ )
{
sf::Vector2f pozycja_pudla = pudla_obiekt.pudla[ i ].getPosition();
if(( pozycja_pocisku.x >= pozycja_pudla.x ) &&
( pozycja_pocisku.x <= pozycja_pudla.x + 26 ) &&
( pozycja_pocisku.y >= pozycja_pudla.y ) &&
( pozycja_pocisku.y <= pozycja_pudla.y + 22 ) )
shoot = false;
pudla_obiekt.pudla.erase( pudla_obiekt.pudla.begin() + i );
}
Dodam jeszcze, że jeśli wywalam erase, to pocisk zatrzymuje się na pudle( to, że nie znika nie jest istotne, na razie tak ma być ), czyli prawidłowo, ale jak jest erase to pudła znikają od razu jak wystrzele pocisk.
Jeśli nie widać tu błędu to załączę cały kod. Mam nadzieję, że wiadomo o co chodzi :D