Tomasz95 Temat założony przez niniejszego użytkownika |
Strzelanie w allegro 4 pod dowolnym kątem. » 2014-07-11 18:07:19 Nie umiem tego zrobić. Już szukałem w google ale i tak nie wiem jak to zrobić. (Znalazłem ale nie zrozumiałem.) Np. kiedy postać używa umiejętności która ma zostać użyta w stronę myszki a myszka znajduje się nie równo po prawej, lewej, na górze tylko pod jakimś kątem. Jak zrobić aby pocisk leciał w stronę myszki/przeciwnika(Jeśli pocisk będzie sam namierzał wroga.)? Napiszcie mi jak to zrobić krok po kroku i bardzo szczegółowo. |
|
unkn9wn |
» 2014-07-11 18:46:34 uzywając funkcji trygonometrycznych obliczasz
1. kąt
kat = atan2(cel.y - strzelba.y, cel.x - strzelba.x) // * 180 / PI; // i zamiana na stopnie #edit nie potrzebna
2. prędkośc pod kąt
velocity.x = cos(kat) * speed; velocity.y = sin(kat) * speed;
pozostaje już tylko zmieniać pozycję pocisku o prędkość
pocisk.x += velocity.x; pocisk.y += velocity.y;
|
|
Monika90 |
» 2014-07-11 19:28:49 Ta zamiana na stopnie, to nie za bardzo jest OK. Po pierwsze po co w ogóle zamieniać na stopnie - radiany są lepsze. A po drugie, używasz tego kąta jako argumentu sin i cos, sin i cos wymagają argumetu w radianch.
A to że zamiast atan2, sin i cos można obliczyć to samo za pomocą sqrt i dzielenia, to zupełnie inna sprawa. |
|
Tomasz95 Temat założony przez niniejszego użytkownika |
» 2014-07-11 20:55:31 unkn9wn A mógłbyś pokazać mi to na przykładzie? Czy wystarczy po prostu skleić te linijki kodu które podałeś żeby to zadziałało? |
|
unkn9wn |
» 2014-07-11 22:11:35 No tak, mój głupi błąd, nie posługiwałem się funkcjami trygonometrycznymi od dawna, a wycinków kodu, które podałem, nie sprawdziłem. Teraz to sobie napisałem Na początku przed main() definiujesz sobie strukturę, by w jednym obiekcie przechować wartości X i Y struct vectorXY { float x; float y; }; po czym tworzysz sobie kilka zmiennych vectorXY pozycja; vectorXY velocity; float speed; float kat;
w pętli, gdzie aktualizujesz obiekty wyliczasz kąt, gdzie cel to vectorXY w które celuje myszka, strzelba to vectorXY wystrzału kat = atan2( cel.y - strzelba.y, cel.x - strzelba.x );
po tym obliczasz prędkość z jaką będzie się poruszał pocisk velocity.x = cos( kat ) * speed; velocity.y = sin( kat ) * speed;
i aktualizujesz pozycję pocisku na ekranie pocisk.x += velocity.x; pocisk.y += velocity.y;
|
|
Tomasz95 Temat założony przez niniejszego użytkownika |
» 2014-07-12 17:15:29 unkn9wn Teraz już będę wiedział jak to zrobić ale mam inny problem dotyczący wyświetlania tekstu na ekranie. textprintf_ex(screen, font, 50, 50, makecol(255, 255, 255), -1, "x=", ludzik_x ); Wartość zmiennej ludzik_x nie chce się pojawić na ekranie. |
|
Monika90 |
» 2014-07-12 17:49:54 |
|
Tomasz95 Temat założony przez niniejszego użytkownika |
» 2014-07-12 18:14:43 Monika90 Mogłabyś pokazać mi to na przykładzie? Najłatwiej jest mi zrozumieć jeśli jest podany jakiś przykład. |
|
« 1 » 2 |