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

[SFML 2.0] Kolizja

Ostatnio zmodyfikowano 2013-07-15 12:17
Autor Wiadomość
kubawal
Temat założony przez niniejszego użytkownika
[SFML 2.0] Kolizja
» 2013-07-15 11:24:06
Witam!

Dziś znowu coś mi nie działa :|. Mianowicie: kolizja. Program wykrywa kolizje z obiektami na innych pozycjach, niż są, i usuwa wszystkie.

Kod:
Objects.h:
C/C++
// funkcje kolizji:
inline bool Collision( IntRect i1, IntRect i2 )
{
    return i1.intersects( i2 );
}

inline bool Collision( Sprite & s1, Sprite & s2 )
{
    return Collision( s1.getTextureRect(), s2.getTextureRect() );
}

//...

class Plane
{
    Sprite sp;
    Map & map; // ref. do mapy, na której jest ten samolot
   
    //...
   
    void Psychics();
   
    //...
};

//...

struct Map
{
    vector < Object *> objs; // wektor wskaźników do dynamicznie alokowanych obiektów
    //...
};

//...

struct Object
{
    Sprite sp;
    //...
};

Objects.cpp:
C/C++
//...
void Plane::Psychics()
{
    for( int i = 0; i < map.objs.size(); i++ )
    {
        if( Collision( map.objs[ i ]->sp, sp ) )
        {
            cout << "Kolizja z " << map.objs[ i ] << endl; // to jest do Debug'a
            //... // dodawanie punktów, obrażeń, itd.
            delete map.objs[ i ];
            map.objs.erase( map.objs.begin() + i );
        }
    }
}

Co tu jest nie tak?

Pewnie ktoś znowu znajdzie banalne rozwiązanie tego problemu, lecz ja go na razie nie widzę ;(.
P-87890
pekfos
» 2013-07-15 11:33:26
Wiesz w ogóle, co robi getTextureRect()? Powinieneś raczej użyć getGlobalBounds().
P-87893
kubawal
Temat założony przez niniejszego użytkownika
» 2013-07-15 12:17:42
Po zmianie na getGlobalBounds() działa.
P-87910
« 1 »
  Strona 1 z 1