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

[SFML 2.1] Wartość NaN

Ostatnio zmodyfikowano 2013-09-12 17:38
Autor Wiadomość
Bimbol
Temat założony przez niniejszego użytkownika
[SFML 2.1] Wartość NaN
» 2013-09-11 23:43:42
Witam, napotkałem się na dziwną wartość zwracaną przez vektor sprajta.
Otóż w przypadku, gdy dwa sprajty są idealnie na siebie nałożone podczas próby sprawdzenia pozycji, kompilator wyświetla
nan
.

Czy ktoś spotkał się już z czymś takim? Jeśli tak to czy mógł by mi przybliżyć szczegóły tego zjawiska.
P-91969
pekfos
» 2013-09-12 13:21:52
Pokaż kod.
P-91978
Bimbol
Temat założony przez niniejszego użytkownika
» 2013-09-12 17:04:09
Musiał bym wysłać cały kod gry, bo po prostu wyświetla mi
nan
, gdy próbuję pobieram pozycje Sprajta za pomocą metody zwracającej vektor.
Dokładniej
sprajt.getPosition().x
.
P-92019
pekfos
» 2013-09-12 17:12:03
Wyświetlasz tę pozycję, czy, od tak, się pojawia?
P-92020
Bimbol
Temat założony przez niniejszego użytkownika
» 2013-09-12 17:38:19
Dobra przyjrzałem się sprawie i po analizie w którym momencie do tego dochodzi, odkryłem co jest przyczyną.
Standardowo Sprajt pokazuje się w górnym lewym rogu. Gdy jakiś gracz dołącza do gry, to tworzy się drugi sprajt w tym samym miejscu, jeśli Host się nie poruszył.

A metoda sprawdzająca kolizję wygląda tak:
C/C++
bool CPlayer::Collision( CPlayer * player )
{
    float side = sqrt( pow( Player.getPosition().x - player->GetPos().x, 2 ) + pow( Player.getPosition().y - player->GetPos().y, 2 ) );
    if( side >= bRadius + player->GetRadius() )
    {
        return false;
    }
   
    float x = Player.getPosition().x - player->GetPos().x;
    float y = Player.getPosition().y - player->GetPos().y;
   
    Player.move( x / side, y / side );
    return true;
}

Przy pierwszym przejściu jeśli host się nie ruszy, to jest kolizja. Pozycja obu graczy jest ta sama, więc odejmowanie x1 od x2, y1 od y2 będzie 0.
Podobnie ze side, które przyjmuje właśnie x i y, które w tym przypadku były równe 0 więc zwróciło nan. Zwyczajnie dzieliło przez 0.

Zagadka rozwiązana. Myślałem, że to problem z SFML. Dzięki temu przynajmniej się czegoś dowiedziałem.
P-92021
« 1 »
  Strona 1 z 1