Poruszanie się postaci pod dowolnym kątem
Ostatnio zmodyfikowano 2013-02-26 18:41
aimo6 Temat założony przez niniejszego użytkownika |
Poruszanie się postaci pod dowolnym kątem » 2013-02-23 21:17:22 witam ostatnio kombinuje trochę i natrafiłem na pewną trudność. Próbuję stworzyć grę 2d z widokiem z góry. mój problem polega na tym, że chciałbym zrobić sterowanie troszkę bardziej dynamiczne niż coś takiego: if( sf::keyboard::isKeyPressed( sf::keyboard::W ) ) pozycja.x++;
if( sf::keyboard::isKeyPressed( sf::keyboard::S ) ) pozycja.x--;
if( sf::keyboard::isKeyPressed( sf::keyboard::A ) ) pozycja.y++;
if( sf::keyboard::isKeyPressed( sf::keyboard::D ) ) pozycja.y--;
wolałbym aby A oraz D obracało się postać. Niby nic trudnego, ale pozostaje wtedy problem że postać nadal chodzi w tedy tylko do góry i dołu. Potrzebny mi jest jakiś przelicznik: if( sf::keyboard::isKeyPressed( sf::keyboard::W ) ) pozycja += przelicznik;
if( sf::keyboard::isKeyPressed( sf::keyboard::S ) ) pozycja += przelicznik;
Na pewno przelicznik jest zależny od kąta o jaki obrócony jest sprite. moje pytanie jest takie: jak zrobić aby postać chodziła w stronę w którą jest obrócona? |
|
pekfos |
» 2013-02-23 21:23:49 |
|
RazzorFlame |
» 2013-02-24 12:31:22 Pekfos, to nie takie łatwe, same sinus, cosinus nie da mu nic jeśli nie będzie potrafił tego wykorzystać. aimo6 tak jak napisał pekfos użyj trygonometrii do obliczania przesunięcia obiektu pod danym kątem. EasyKoder na swojej stronie ma artykuł o obrotach. Co prawda to pod Allegro, ale to chodzi ogólnie o obliczenia (wyświetlanie łatwo). Czyli tak: Sinus/Cosinus - na googlach jest pełno tego (wymaga troche dużej chęci ;P) EasyKoder.vot.pl - Artykuł o obrotach sfml-dev.org - w Dokumentacji, jak obrócić w daną stronę obrazek (sf::Sprite::SetRotation()) Korzystając z tych informacji, na pewno dasz rade. Jeśli masz jeszcze jakieś pytania lub coś nie wypaliło to pisz, naprowadzimy cię :) |
|
pekfos |
» 2013-02-24 12:49:42 Pekfos, to nie takie łatwe, same sinus, cosinus nie da mu nic jeśli nie będzie potrafił tego wykorzystać. |
Jak wie, co to sinus i cosinus, to reszta przyjdzie sama. (Chyba, że nie rozumie dzielenia i mnożenia..) |
|
Kopczak1995 |
» 2013-02-24 12:58:54 @Pekfos Ja też muszę się zgodzić z @RazzorFlame'em. Zauważ, że aimo6 zapewne podobnie jak i ja :P jest jeszcze początkujący i nawet jeżeli ogarnie prostą choćby trygonometrię to jeszcze kwestia przełożenia wszystkiego na C++, a to dla takiego delikwenta nie mały kłopot - ja też jakbym miał nad tym posiedzieć to mnie głowa boli :D Jednak wiadomo - dla chcącego nic trudnego tyle, że zawsze lepiej jak ktoś ciebie naprowadzi na właściwy tor niż gdybyś męczył się bez żadnej świadomości od czego zacząć - to tylko zniechęca :/ |
|
aimo6 Temat założony przez niniejszego użytkownika |
» 2013-02-26 18:41:47 Dziękuje wszystkim za pomoc. okazało się, że jedyne co wcześniej robiłem źle, to to, że podawałem kąt w zwykłych stopniach, zamiast w radianach (swoją drogą nie mam pojęcia do czego to jest, ale to szczegół) v.x =- speed * sin(( kat * M_PI ) / 180.0f ); v.y = speed * cos(( kat * M_PI ) / 180.0f );
tyle wystarczyło aby wszystko ładnie działało. |
|
« 1 » |