Skocz do zawartości

Prędkość a odbijanie


Shaman

Rekomendowane odpowiedzi

Na wstępie chciałbym się z wami przywitać - to mój pierwszy post.

 

download

 

Powyżej zamieściłem przykład przedstawiający pewien problem, na który się natknąłem przy tworzeniu mojej pierwszej gry. Jeśli macie odrobinkę czasu to prosiłbym żebyście go ściągnęli i obejrzeli. Klawiszologię uzyskacie włączając game info (F1).

 

W przykładzie występują jasna i ciemna piłka. Po wystrzeleniu, jedna porusza się dwa razy szybciej od drugiej. Problem polega na tym, że piłki, mimo że startują z tego samego miejsca, nie zawsze trafiają w to samo miejsce (czarne pole jest barierą, która zatrzymuje piłki). Musicie popróbować kilka razy, bo problem pojawia się zależnie od miejsca startu piłek. Mam nadzieję, że zrozumiecie o co chodzi.

 

No wiec, czy nie wiecie co trzeba zrobić, żeby piłki niezależnie od prędkości zawsze poruszały się jednakowym torem i czy to w ogóle jest możliwe? Chodzi po prostu o to żeby przyspieszona piłka nie zmieniała kąta odbicia przy zderzeniu ze ścianą w stosunku do piłki wolniejszej. Aha, no i nie chodzi o to żeby wyznaczyć piłkom współrzędnych i kazać im się w ich stronę poruszać... To by mi nie pomogło.

 

Z góry dzięki :thumbsup:

Odnośnik do komentarza
Udostępnij na innych stronach

Mogę ci wyłumaczyć dlaczego tak się dzieje, ale jak to naprawić to nie wiem, musisz chyba zrobić jakąś lepszą fizykę na odbijanie.

Zastosuje dwa przykłady, pierwszy z nabojem:

abcjc8.png

Strzał leci od zielonego z prędkością 15. Bardzo szybko powinien trafić niebieskiego... Strzał ten jednak ominie go, dlaczego ?? Dlatego, że przesuwa się o 15 x na 1 step i akurat ze step'u 2 na step 3 (step-czas GameMaker'owy :P ) nabój jest najpierw przed nim, a później za nim i go nie trafia...

 

Podobnie jest z piłką:

biu3.png

W miejscu czarnego puntku są dwie piłki, pokazanę są ich ścieżki, niebieska i czerwona. Lecą w równej lini, lecz po odbiciu jedna odbija się dalej, druga bliżej tylko przez prędkość. Po prostu inaczej wpadają na ścianę.

Mam nadzieję, że przeczytałeś wszystko i rozumiesz, przyjmij to jako tutorial :jezor: .

 

EDIT:

 

O kurde rzeczywiście nie jestem daltonistą tylko pisałem o przykładzie z pamięci :jezor: .

Odnośnik do komentarza
Udostępnij na innych stronach

ja narazie wykąbinowałem to:

for (d=0;d<speed;d+=1;)
{
if collision_point(
x+cos(degtorad(direction))*d
,y-sin(degtorad(direction))*d
,mur,1,1)
    {
    kolizja=collision_point(
    x+cos(degtorad(direction))*d
    ,y-sin(degtorad(direction))*d
    ,mur,1,1)

    x=x+cos(degtorad(direction))*d
    y=y-sin(degtorad(direction))*d
    //instrukcja odbicia sie
    }
}

EDIT:

ps. jak jest bounce against obiects w kodzie?

Odnośnik do komentarza
Udostępnij na innych stronach

proszę bardzo oto moje dziełko:

for (d=0;d<speed;d+=sprite_width/sprite_height;)
{

xx=x+cos(degtorad(direction))*d-sprite_width/sprite_height
yy=y-sin(degtorad(direction))*d-sprite_width/sprite_height

if collision_rectangle(xx-sprite_width/2,yy-sprite_height/2,xx+sprite_width/2,yy+sprite_height/2,mur,1,1)
    {

    
    
    x=x+cos(degtorad(direction))*d-1-sprite_width/sprite_height
    y=y-sin(degtorad(direction))*d-1-sprite_width/sprite_height
    pspeed=speed
    speed=0
    move_bounce_solid(1)
    speed=pspeed
    }
}

ta piłeczka się odbija od obiektu(mur) który jest soild

Odnośnik do komentarza
Udostępnij na innych stronach

Dzięki chłopaki za zainteresowanie problemem i szybkie odpowiedzi. :thumbsup:

 

Serge: Dzięki za wyjaśnienie. Przykład z nabojem rozumiem bez kłopotu. Przykład z piłkami już mniej, ale obserwowałem ruch piłek step po stepie i możliwe że w tym co napisałeś jest sporo racji. Jednak patrząc na obrazek nie mogę zrozumieć czemu tor czerwony tak mocno wbija się w ścianę (zakładam, że brązowe pole jest ścianą) - przyglądając się ruchowi piłki nie widziałem żeby wchodziła ona w ścianę. Możliwe też, że twój rysunek jest pewnym schematem i jakoś źle go odczytuję. Jakbyś mógł mi to zagadnienie lepiej wyjaśnić to byłbym wdzięczny.

 

 

Ranmus: Dzięki za podpowiedź. Jutro jak będę miał czas to poczytam w helpie o collision_line i może coś rozkminię. Poszukam też przykładów.

 

 

Cekol: Sorki, ale to co napisałeś nic mi nie mówi. To jest zbyt skomplikowane dla mnie... Nawet nie wiem gdzie twój kod miałem wstawić w przykładzie, ale domyśliłem się że w kolizji piłek ze ścianą - efekt nie był dobry. Ale wielkie thx za twoją pracę.

 

EDIT:

ps. jak jest bounce against obiects w kodzie?

 

Nie rozumiem pytania. Jeśli chodzi ci o to, czy jest ustawione precisely czy not, to odpowiedź brzmi: not precisely. Ale najlepiej sam sprawdź mój przykład - jest do ściągnięcia w pierwszym poście.

 

 

Nicolas:

Action Decoder? O ile się nie mylę to program do zamiany klocków w kod? Jeśli tak, to do czego on może się przydać w moim przykładzie?

 

 

Do wszystkich powyższych:

Może najlepiej byłoby jakbyście przerobili mój przykład w taki sposób żeby naprawić ten błąd z odbijaniem i go zamieścili. Wtedy mógłbym rozkminić cały problem na podstawie rozwiązania. Więc jeśli macie chwilę czasu to byłbym wdzięczny :thumbsup:

 

EDIT:

PS. Im szybciej rozwiążę ten problem tym szybciej ukończę moją pierwszą grę i zamieszczę ją na forum B)

Odnośnik do komentarza
Udostępnij na innych stronach

Po prostu na drugim rysunku nie jest pokazana ścieżka z równymi prędkościami. Przyjrzyj się dokładnie, a zauważysz czarne kropki które są co jakiś kawałek linii. Jedna linia pokazuje 13, a druga 11 speed'a jak dobre pamiętam :thumbsup: . A 11 speed'a oznacza przeskakiwanie co 1 step o 11 pixeli.

Odnośnik do komentarza
Udostępnij na innych stronach

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ę...