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

Strzelanie w allegro 4 pod dowolnym kątem.

Ostatnio zmodyfikowano 2014-07-12 23:22
Autor Wiadomość
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.
P-113635
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;

P-113637
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.
P-113641
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?
P-113650
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

C/C++
struct vectorXY
{
    float x;
    float y;
};

po czym tworzysz sobie kilka zmiennych

C/C++
vectorXY pozycja; // pozycja pocisku na ekranie
vectorXY velocity; // prędkość poruszania się pocisku
float speed; // pęd pocisku
float kat; // kąt pod jakim leci pocisk

w pętli, gdzie aktualizujesz obiekty wyliczasz kąt, gdzie cel to vectorXY w które celuje myszka, strzelba to vectorXY wystrzału
C/C++
kat = atan2( cel.y - strzelba.y, cel.x - strzelba.x );

po tym obliczasz prędkość z jaką będzie się poruszał pocisk
C/C++
velocity.x = cos( kat ) * speed;
velocity.y = sin( kat ) * speed;

i aktualizujesz pozycję pocisku na ekranie
C/C++
pocisk.x += velocity.x;
pocisk.y += velocity.y;
P-113654
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.
P-113686
Monika90
» 2014-07-12 17:49:54
bo to działa tak jak printf w C, a tu nawet jest wyjaśnione jak: http://cpp0x.pl/dokumentacja​/standard-C​/tekst-sformatowany-printf/736
P-113692
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.
P-113693
« 1 » 2
  Strona 1 z 2 Następna strona