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. |
|
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ś.. |
|
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 |
|
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. |
|
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 :) |
|
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. |
|
Patrycjerz |
» 2015-07-07 21:53:48 Tzn.? Za wszelkie uwagi będę miły... a może chodzi o przejęzyczenie? |
|
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. |
|
1 « 2 » 3 |