Skocz do zawartości

Rekomendowane odpowiedzi

Opublikowano

Mam kolejny problem. W przykładzie z miotaczem ognia spotkałem sie z takim kodem:

GML
if ( keyboard_check( vk_space ) )

{

xx = x + sin( degtorad( direction + 90 ) ) * 16;

yy = y + cos( degtorad( direction + 90 ) ) * 16;

instance_create(xx,yy,flame);

}

Chodzi mi o to, że nie miałem jeszcze w szkole funkcji trygonometrycznych, ani pojęcia radian więc, czy mógłby mi ktoś powiedzieć za co odpowiedzialny jest ten kawałek kodu (3 i 4 linia kodu)?
Opublikowano

sinus, cosinus - sinus ? oznaczany sin ? stosunek przyprostokątnej a; przeciwległej do kąta ostrego i przeciwprostokątnej c;

cosinus (lub kosinus) ? oznaczany cos ? stosunek przyprostokątnej przyległej b; do kąta ostrego i przeciwprostokątnej c;

 

 

degtorad - zmien na radiany (miara kata płaskiego w SI)

direction = dokumentacja

+ 90 -trzeba tłumaczyć??

*16 - wszystko * 16

 

c6372d47685d7f03f82c5d35cd64a3fa.png

Opublikowano

Ach tak ! Kod tworzy obiekt płomień (flame) w miejscu zmiennych xx oraz yy tylko po naciśnięciu spacji. Zmienne opisałem i rozłożyłem na składniki. No a efekt - widzisz w przykładzie...

Opublikowano

Rozumiem, że x + sin( degtorad( direction + 90 ) ) * 16 i ten drugi oblicza punkt na okręgu zataczanym przez obiekt strzelający, z którego "wydobywa się ogień". Zatem czy można tego użyć do dowolnego innego obiektu, czy trzeba by było zmiennić wartości liczbowe przy innym rozmiarze obiektu?

Opublikowano

Tak, możesz użyć także do innych obiektów, a zmieniając te wartości odsuniesz/przybliżysz/przesuniesz te punkty xx i yy.

Podobnie ma się sprawa z

GML
lengthdir_x i lengthdir_y

które działają na podobnych zasadach ;)

Opublikowano

Z jednej strony rozumiem, o co w tym chodzi, ale z drugiej mam takie poczucie niewiedzy i nie chcę czekać aż do liceum, zeby to zrozumieć :/ Czy trygonometria jest naprawdę taka trudna, czy poprostu potrzebuję zobrazowania na przykładach jak to działa? Gdyby nie to pewnie już bym w tym kierunku śmigał (Może nie aż tak, ale dobrze bym sobie radził).

Opublikowano

trygonometria to tylko wzory:

 

tg(alfa) = przyprostokątna naprzeciw kąta alfa / przyprostokątna obok kąta alfa

ctg(alfa) = przyprostokątna obok kątowi alfa / przyprostokątna naprzeciw kąta alfa

 

sin(alfa) = przyprostokątna naprzeciw kąta alfa / przeciwprostokątna

cos(alfa) = przeciwprostokątna / przyprostokątna naprzeciw kąta alfa

 

są jeszcze arctg i arcsin, które obliczają kąt na podstawie stosunku boków trójkąta prostokątnego.

 

W tym kodzie co dałeś mnoży się stosunek boków (sin i cos) przez długość kratki i wychodzi ci przesunięcie x i y.

Opublikowano

W ogóle ma go nie dotykać, czy jak? Dobra przerobie Ci przykład, ale powiedz jak daleko za?

Opublikowano

Chodzi mi o to, że obiekt by zostawiał obiekt "klej", który by zwalniał przeciwników, no ale także jego. Chodzi mi o to by odległość między nimi była minimalna, byleby ich sprite'y nie zachodziłyby na siebie.

Opublikowano

Musisz zrobić inne XX oraz YY... A teraz w zależności w jakim kierunku jesteś zwrócony musisz tworzyć inaczej obiekt. W edicie dam przykład.

E: AAA pomyliłem się... Chcesz tworzyć zawsze za obiektem :) Spoko zaraz się zrobi!

E2 : Dobra chłopie:

1. Nie zmieniasz nic w kodzie!

2. Zmieniasz orginy, czyli :

a)masz zapisany projekt? Jeśli tak zmieniasz tryb na ADVENCED, czyli w GM klikasz File i zaznaczasz Advenced Mode

b)wchodzisz w ustawienia sprite'a bohatera klikając na SRITE'a dwukrotnie.

c)zmieniasz orgin x na (w zależności od wielkości sprita) połowę X na minusie (np. sprite 32x32 zmieniasz -16x16, a wcześniej miałeś 16x16) Y pozostawiasz bez zmian

d)uruchamiasz i sprawdzasz czy działa :)

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...