|
Płynne kolizje |
| Autor |
Wiadomość |
Ishimura

Pomógł: 11 razy Posty: 299
4531 Prestiż
|
Wysłany: 12-07-2015, 13:35 Płynne kolizje
|
|
|
| Siemanko, mam problem z kolizjami. Otóż o ile podłoga działa spoko tak jak powinna, to jak skacze, to postać jakby "przykleja się" do sufitu i spada pionowo i nawet nie można nią wtedy sterować? Jakiś pomysł na taką płynną kolizję ? Chodzi o to że jak walnie głową w sufit, a porusza się w przód to dostanie takiego poślizgu głową po suficie :P |
|
|
|
 |
307

Posty: 42
2307 Prestiż
|
Wysłany: 12-07-2015, 14:34
|
|
|
| Użyj PMO. |
|
|
|
 |
wermi
Depressive Disorder

Pomogła: 53 razy Posty: 1018
15752 Prestiż
|
Wysłany: 13-07-2015, 07:36
|
|
|
| używasz wbudowanego ruchu platformowego opartego o box2d czy tego starego szajsu? |
|
|
|
 |
Ishimura

Pomógł: 11 razy Posty: 299
4531 Prestiż
|
Wysłany: 13-07-2015, 16:57
|
|
|
| Heh dokładnie to nie wiem jakiego używam :P Normalnie, bohater to active o typie platform, a do tego kolizje z background. Wiem że to chała tak więc zwracam się o jakąś pomoc :P |
|
|
|
 |
jarlfenrir

Pomógł: 82 razy Posty: 1731
37283 Prestiż
|
Wysłany: 13-07-2015, 19:10
|
|
|
| [quote="Ishimura"]bohater to active o typie platform[/quote]Co to znaczy, że "o typie platform"? W zakładce ruch określiłeś mu "platform"? |
|
|
|
 |
Ishimura

Pomógł: 11 razy Posty: 299
4531 Prestiż
|
Wysłany: 13-07-2015, 19:45
|
|
|
| Dokładnie :) Movement -> Type = Platform |
|
|
|
 |
jarlfenrir

Pomógł: 82 razy Posty: 1731
37283 Prestiż
|
Wysłany: 13-07-2015, 20:12
|
|
|
[quote="Ishimura"]Dokładnie :) Movement -> Type = Platform[/quote]Więc to jest to, co tutaj nazywamy "wbudowany ruch platformowy". I kiedyś ludzie polecali zrobienie własnego ruchu platformowego, a teraz widzę, że jakieś nowe rozszerzenia się popojawiały...
własny ruch, czyli dodajesz dodatkowe obiekty, detektory, które zawsze podążają za twoją postacią, ale są ułożone dookoła niej.
Potem dodajesz warunki typu:
użytkownik wcisnął lewo + lewy detektor nie koliduje z przeszkodą -> przesuń ludzika w lewo
detektor dół nie koliduje z tłem -> przesuń ludzika w dół
ludzik jest w fazie skoku + detektor górny koliduje z tłem -> przerwij skok
(zdarzenia zaprezentowane poglądowo) |
|
|
|
 |
Ishimura

Pomógł: 11 razy Posty: 299
4531 Prestiż
|
Wysłany: 13-07-2015, 20:39
|
|
|
A np, jak ze skokiem? Jakieś parametry trzeba wprowadzać żeby skok był takim łukiem ?
Albo jakieś rozszerzenie jest ? |
|
|
|
 |
Cootje

Pomógł: 35 razy Posty: 644
18047 Prestiż
|
Wysłany: 13-07-2015, 22:25
|
|
|
| Ten ruch z box2d nie ma już tego buga. |
_________________ [url=https://www.dropbox.com/s/8bz8xtij52qs5hb/Cootje.asc?dl=0]Mój klucz publiczny PGP[/url] |
|
|
|
 |
jarlfenrir

Pomógł: 82 razy Posty: 1731
37283 Prestiż
|
Wysłany: 13-07-2015, 22:36
|
|
|
Ja to zawsze robię za pomocą jednej zmiennej obiektu. Np ustawiam ją na -5 (grawitacja).
Potem zdarzenia:
jeśli grawitacja różna od 0 ->
dodaj do pozycji Y grawitację
jeśli dolny detektor nie koliduje z tłem ->
dodaj do grawitacji 1
Jeśli dolny detektor koliduje z tłem ->
ustaw grawitację na 0
Jeśli górny detektor koliduje z tłem ->
ustaw grawitację na 0
Dzięki temu w każdej kolejnej ramce postać przesunie się o coraz mniejszą liczbę pikseli w górę aż w końcu dojdzie do zera (w tej ramce postać "zawiśnie" w powietrzu). Następnie licznik przekręci się na liczby dodatnie i postać zacznie spadać z coraz większą prędkością.
Jak dodasz do tego jednostajny ruch po X (np. gracz trzyma wciśnięty klawisz w prawo, więc jednostajnie przesuwasz postać o np. 3 piksele w prawo), to uzyskasz efekt lotu po łuku.
Dodatkowo dla większej precyzji warto użyć fastloopa.
tj. zamiast przesuwać obiekt o wartość grawitacji dodać:
grawitacja większa od 0 -> uruchom pętlę "G" tyle razy, ile ma wartość grawitacja
grawitacja mniejsza od 0 -> uruchom pętlę "G" minus grawitacja razy
w pętli "G"
grawitacja mniejsza od 0
-> ustaw pozycję Y na Y -1
w pętli "G"
grawitacja większa od 0
-> ustaw pozycję Y na Y +1
(przydałaby się funkcja signum, by te dwa zdarzenia scalić w jedno, ale nie mogę takowej znaleźć...) |
|
|
|
 |
Ishimura

Pomógł: 11 razy Posty: 299
4531 Prestiż
|
Wysłany: 14-07-2015, 21:46
|
|
|
Heh, mam pewien problem. Jak zanegować kolizję z innym obiektem ? Opcja jest na szaro, a jak przykleiłem colider do postaci i daje zdarzenie;
Colider collision with bacdkdrop -> to w tym momencie nie można ustawić Movement - Stop dla obiektu bohater.
Aha i czy typ movementu obiektu należy zmienić czy może być Static ? |
|
|
|
 |
Zax37

Pomógł: 1 raz Posty: 29
1661 Prestiż
|
Wysłany: 15-07-2015, 07:48
|
|
|
Kolizji nie możesz zanegować, bo to taki trochę callback, ale możesz zanegować overlapping.
Colider not overlapping backdrop
+ewentualnie odtwórz raz jeśli zapętlone żeby uzyskać podobny efekt do kolizji, ale na wyjście z niej
Chyba że nie o to chodzi. Jeśli nie możesz ustawić Movement - Stop, to znaczy że obiekt nie ma wybranego odpowiedniego ruchu. Oczywiście przy własnym ruchu tej opcji się nie używa, chyba że opiera się go na wbudowanym. |
|
|
|
 |
|
|