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

[SFML2] Platformówka a bounding box collision

Ostatnio zmodyfikowano 2015-07-08 14:07
Autor Wiadomość
qest43
Temat założony przez niniejszego użytkownika
» 2015-06-22 21:02:38
Jak się stoi na rogach to wykrywa zawsze obie możliwości.
P-133945
pekfos
» 2015-06-22 21:23:32
Jak się stoi na rogach to wykrywa zawsze obie możliwości.
Może zamiast bronić swojego niedziałającego kodu mógłbyś, na przykład, zastosować w końcu któreś z zaproponowanych rozwiązań? Twój ostatni post nie wnosi absolutnie nic do tematu. No wykrywa, tak jest w twoim rozwiązaniu i jest to sytuacja błędnie rozpoznawana przez twój program i to jest przyczyną, lub jedną z przyczyn problemów, o czym piszemy od samego początku. Przynajmniej teraz sam do tego doszedłeś..
P-133946
qest43
Temat założony przez niniejszego użytkownika
» 2015-06-28 20:56:28
Ale co w takim przypadku gdy gracz jest na górze w rogu, przecież część wspólna jest wyższa niż szersza i spadnie na dół.
http://screenshot.sh/oBH9eCrcR1xad
P-134138
pekfos
» 2015-07-02 18:39:19
To niech spadnie. Mój sposób nie zapewnia ochrony przed tunelowaniem, a twój przypadek tego właśnie dotyczy. W normalnych warunkach i przy twoim typie projektu, postać nie może się tak wbić w platformę. Kolizja zostanie wykryta dużo wcześniej, nie zostawiając żadnych wątpliwości.
P-134265
Patrycjerz
» 2015-07-07 21:21:56
Ja mam taki sposób, stosuję go w swoich produkcjach i działa idealnie :D Nie ma żadnego problemu "tunelowania", jak to wcześniej nazwano oraz jest dosyć prosty. Moja metoda do działania potrzebuje kierunku, w którym aktualnie porusza się obiekt, tzn. w 2D: góra, dół, lewo czy prawo. Np. przy ruchu paraboliczny, kierunek obiektu zmienia się ciągle, jak np. spada, to raz dół i zaraz lewo/prawo, i tak w kółko. Oczywiście połączenie dwóch ruchów: w dół i w lewo/prawo; powoduje zamierzony przez nas ruch, którego efekty generujemy w każdej klatce. Przepraszam za lenistwo, ale posłużę się pseudokodem :) Chyba będzie lepiej zrozumiały, niż zagmatwany kod z metodami SFML :)

Prezentuję tu przykład parabolicznego spadania, niech będzie w prawo :)

wykrycieWcisnietegoKlawisza(); //prawo
poruszeniePrzeszkody(); //ważne!!! musi najpierw poruszyć się przeszkoda, przed obiektem np. gracza
jeżeli(nieMaKolizjiWDol()) to
{
//oś OY
ustawienieKierunkuObiektuWDol();
poruszenieObiektuWDol(); //poruszenie obiektu o daną odległość (wziętą z prędkości)
jeżeli(obiektPrzenikaPrzeszkode() i kierunekJestDol()) to
{
poprawJegoPozycje(); //przy spadaniu poruszamy go do góry, aby stykał się z przeszkodą
}
}
//... analogicznie z ruchem w górę, kierunek, poruszenie, poprawa pozycji przy przeniknięciu
//... i także analogicznie ruch w lewo i w prawo w osi OX

Pisałem to z głowy, więc jakby był błąd, to od razu mówić :)

Takie "krokowe" postępowanie umożliwi ominięcie wszelkich błędów. Oczywiście nie zadziała ten sposób, gdy prędkość obiektu jest tak duża, że przy poruszeniu go o daną odległość, przeniknie przeszkodę. Kolejność sprawdzania, czy to oś OY, czy OX jest dowolna. Można nawet powiedzieć, że kierunek ruchu przy spadaniu nie jest potrzebny, ale chodziło mi o zaprezentowanie sposobu, a nie kodu "kopiuj, wklej".

Mam nadzieję, że komuś to pomoże :)
P-134426
pekfos
» 2015-07-07 21:51:41
Nie ma żadnego problemu "tunelowania", jak to wcześniej nazwano oraz jest dosyć prosty.
Twój pseudokod mówi co innego.
P-134428
Patrycjerz
» 2015-07-07 21:53:48
Tzn.? Za wszelkie uwagi będę miły... a może chodzi o przejęzyczenie?
P-134429
maly
» 2015-07-08 07:23:03
Oczywiście nie zadziała ten sposób, gdy prędkość obiektu jest tak duża, że przy poruszeniu go o daną odległość, przeniknie przeszkodę.
To jest właśnie to tunelowanie.
P-134437
1 « 2 » 3
Poprzednia strona Strona 2 z 3 Następna strona