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

[SFML] Kolizja i co potem?

Ostatnio zmodyfikowano 2012-11-02 15:14
Autor Wiadomość
Zyper
Temat założony przez niniejszego użytkownika
[SFML] Kolizja i co potem?
» 2012-10-24 17:40:46
Witam po raz kolejny!
Mam dość poważny problem, bo umiem już wykrywać kolizję, tylko nie wiem jak to potem ogarnąć...
Robiłem to już na dwa sposoby. Raz po wykryciu kolizji obiekt odskakiwał 5 px od strony, z której kolidował (używam sf::Rect).
A drugi sposób to sprawdzanie kolizji z danej strony i gdy jest tam wolne obiekt może się tam poruszyć.

Tworzę grę z widokiem topdown, można poruszać się we wszystkie strony.

Używając tych moich dwóch sposobów problem jest gdy chcękolidować ze ścianą kilku bloków. Z jednym blokiem osobno daje radę. Ale gdy idę ocierając się o ścianę postać albo się blokuję, albo przechodząc z kolizji z jednym blokiem na kolizję z drugim skacze (zależne jest to od w/w sposobów).

Być może ciężko mnie zrozumieć, więc macie tutaj mały obrazek:
http://i.snag.gy/DWbUm.jpg

Mam nadzieje, że macie jakieś pomysły lub sposoby jak to rozwiązać.
Bardzo proszę o pomoc i wiem, że było już milion takich pytań.. ale w żadnym nie było rozwiązania mojego problemu.

Pozdrawiam, Zyper
P-67385
DejaVu
» 2012-10-24 19:36:45
Kolizje to nie taka lekka sprawa... poczytaj trochę o tym:

Frazy, które należy wpisać w wyszukiwarkę google:

http://cpp0x.pl/forum/temat/?id=8546
P-67403
Zyper
Temat założony przez niniejszego użytkownika
» 2012-11-02 10:30:06
Witam ponownie :P

Nigdzie nie ma o takim problemie jaki ja mam. Są tam problemy z tunnelingiem albo nawet samym wykrywaniem kolizji..
Ja jak mówiłem, umiem wykryć kolizję, tylko jak najlepiej ma się zachować obiekt po kolizji? Jak ta kolizja musi być też dokładna? Muszę wykrywać ze wszystkich stron, czy może tylko tam gdzie jest postać?

Proszę o napisanie teoretycznie jak to ma się odbywać. Kod raczej dam radę sam..
Mam skrypt poruszania w 4 kierunkach (jednocześnie), pozycje maski gracza i pozycje grafiki gracza (może będzie potrzebne osobno, nie wiem) no i co z tym teraz dokładnie zrobić?
Zależy mi na tym, że jak poruszam się w górę i w lewo, a koliduję u góry to postać nadal idzie w lewo. Bo taką kolizję gdzie postać całkiem się zatrzymuje zrobić umiem, ale nie o to tu chodzi :P

Proszę o pomoc, już sam nie mam żadnych pomysłów.
P-68148
Mrovqa
» 2012-11-02 10:33:57
Idąc w górę (trzymając naciśniętą strzałkę) możesz sprawdzać, czy bohater nie koliduje z czymś od góry. Podobnie możesz zrobić z innymi kierunkami. Ewentualnie sprawdzasz czy po przeniesieniu postaci w górę nie nastąpi kolizja - wiesz, czy ten przykładowy ruch w górę jest dozwolony. Sposobów jest wiele, trzeba tylko trochę pomyśleć :)
P-68149
Zyper
Temat założony przez niniejszego użytkownika
» 2012-11-02 11:17:31
No tak, myślałem, już nad tym. Ale kolizja w SFML wykrywana za pomocą IntRect zaczyna wykrywać od lewego górnego rogu, więc gdy będzie taka ściana bloków to już nie będzie tak fajnie. Wykrywany będzie tylko jeden blok, a po wejściu w strefę kolizji drugiego postać dziwnie odskoczy/zablokuje się.

Bawił się już ktoś w ogóle z kolizjami w SFML? Mnie też na pierwszy rzut oka wydawało się proste, ale wychodzą jakieś dziwne problemy i komplikacje :/
P-68153
DejaVu
» 2012-11-02 11:35:30
Wykrycie kolizji między dwoma obiektami jest proste. Wykrywanie kolizji między wieloma obiektami już niekoniecznie. Dostałeś jednak linki gdzie szukać informacji, więc skorzystaj z nich.
P-68157
Zyper
Temat założony przez niniejszego użytkownika
» 2012-11-02 11:55:10
Jesteś pewien, że tam jest rozwiązanie mojego problemu?

Znalazłem o: tunnelingu, Box2D, wykrywaniu kolizji, sprawdzaniu z której strony wystąpiła kolizja, kolizji per pixel, mapie kafelkowej itp.

Mógłbym oczywiście przeszukać jeszcze te milion stron w Google, ale jest tam ta odpowiedź, czy podałeś mi te linki dla świętego spokoju?
P-68161
DejaVu
» 2012-11-02 12:02:18
Rozwiązaniem samym w sobie jest nauczenie się Box2D i zastosowanie tej biblioteki. Alternatywną możliwością jest sprawdzanie kolizji 'każdy z każdym' i 'cofanie czasu' w celu usunięcia problemu kolizji. Można też zamiast cofania czasu zastosować algorytm 'odpychania od siebie obiektów' tych, które są w stanie kolizji. Kolizje nie są proste, więc mimo wszystko polecam naukę Box2D.

PS. Nie jesteś pierwszą osobą, która zadaje takie pytania, więc czemu zakładasz, że nie ma odpowiedzi na forum na to pytanie? :)
P-68163
« 1 » 2
  Strona 1 z 2 Następna strona