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

[box2d] Rotacja postaci.

Ostatnio zmodyfikowano 2013-01-16 18:19
Autor Wiadomość
polkom21
Temat założony przez niniejszego użytkownika
[box2d] Rotacja postaci.
» 2013-01-16 14:08:47
Witajcie. Napisałem skrypt liczący kąt obrotu i jest on w skali od -180 do 180 i jest generowany przez taki skrypt:
C/C++
float playerRotatnion( sf::Vector2i mousePosition, b2Vec2 playerPos )
{
    const float PI = 3.14159265;
    float dx = mousePosition.x + playerPos.x - 415 - playerPos.x;
    float dy = mousePosition.y + playerPos.y - 315 - playerPos.y;
    float radian = atan2f( dy, dx );
    float radius =( radian * 180 / PI );
    return radius;
}
I teraz mam problem z zastosowaniem rotacji w box2d. Nie mam pojęcia jak to zrobić. Szukałem w internecie w manualu i nie mogę nic wykombinować. Zrobiłem coś takiego:
C/C++
body->SetTransform( body->GetPosition(), rotation );
player.setRotation( body->GetAngle() );
i postać skacze dziwnie ale nie działa. Jak trzeba to wrzucę skompilowany program.
P-74105
DejaVu
» 2013-01-16 14:23:07
Przelicz kąt obrotu na radiany, bowiem Box2D używa radianów, a SFML stopni.
P-74107
polkom21
Temat założony przez niniejszego użytkownika
» 2013-01-16 14:35:32
No radian to jest kąt razy pi przez 180 i jak robię tak:
(stopien * PI) / 180;
to i tak nie działa. Dzieje się to samo.
P-74108
DejaVu
» 2013-01-16 15:02:16
http://cpp0x.pl/forum/temat/?id=9328&p=2

Patrz kody źródłowe, które wstawiałem - w szczególności linijka:
C/C++
bodyDef.angle = - 5 * 3.14156 / 180.0;
P-74110
polkom21
Temat założony przez niniejszego użytkownika
» 2013-01-16 15:35:53
No nie ogarniam tego. Radian zawsze mi wychodzi z przedziału od -3 do 3 tak w przybliżeniu czyli za mały zakres żeby kąt obrotu działał tak jak powinien.

EDIT
Tak pomyślałem trochę i tak myślę czy na pewno dobrze, że szukam błędu. body->getAngle() przecież zwraca radian a wykorzystuje to przecież w sfml, który korzysta ze stopni więc to chyba dobrze mi pokazuje wszystko tylko teraz pytanie jak zrobić, żeby obrót liczył od środka sprita a nie od lewej górnej krawędzi.
P-74117
ridic14
» 2013-01-16 16:42:16
setOrgin()? dla ścisłości
spr.setOrgin( spr.getGlobalBounds().width / 2, spr.getGlobalBounds().height / 2 );
Dla SFML 2.0
P-74122
polkom21
Temat założony przez niniejszego użytkownika
» 2013-01-16 18:19:14
No efekt końcowy mnie nie satysfakcjonuje ale może uda mi się coś jeszcze dopieścić do końca. Dzięki za pomoc.
P-74134
« 1 »
  Strona 1 z 1