Dobre referencje od kolizji 2D

Hej, obecnie Szukam różnych metod implementacji reakcji kolizji w grach wideo 2D, coś podobnego do tego tutoriala Metanet ma: N Tutorial Szukam implementacji czegoś w XNA, ale każdy język byłby w porządku. Bardziej interesuje mnie implementacja programowa niż faktyczna teoria. Wolałbym bardziej przyjazny dla początkujących materiał, ale mile widziane więcej zaawansowanych tematów.

Więc może ktoś zasugerować jakąś dobrą reakcję kolizji 2D artykuły/książki?

(PS: bardziej interesuje mnie odpowiedź niż Detekcja)

Author: Jeff, 2010-07-15

7 answers

N tutorial , o którym już wspomniałeś, jest świetnym źródłem na początek. Polecam również bardzo dobry artykuł Wykrywanie kolizji wielokątów 2D . Zawiera świetną implementację C# i przykład wykrywania kolizji wielokątów za pomocą twierdzenia o osi oddzielającej i wyjaśnia niektóre z pojęć lepiej.

Jeśli chodzi o reakcję na kolizję, zależy to od scenariusza. W przypadku gier warto sprawdzić ewentualną kolizję na podstawie aktualna prędkość a następnie po prostu dostosuj rzeczywistą prędkość, aby zapobiec kolizji. Możesz również zaimplementować jakiś efekt "odbicia". W każdym razie prawdopodobnie będzie regulować zarówno prędkość, jak i kierunek obiektu.

Możesz użyć twierdzenia Separating Axis do wykrywania kolizji, a także użyć projekcji wielokąta do znalezienia odległości do celu na określonej osi. (w większości przypadków wektor, na którym się poruszasz).

 15
Author: Patrick Klug,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-02-01 06:33:56

Bardzo mi się podoba ten, właśnie pojawił się tydzień temu i jest wszystko, czego można chcieć od robienia efektów relatywistycznych:

Http://www.amazon.com/Physics-Game-Programmers-Grant-Palmer/dp/159059472X

 3
Author: eruciform,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-07-15 00:21:56

Ile szczegółów potrzebujesz? Odpowiedź na niektóre z tych pytań pomoże Ci wyeliminować pakiety, które nie robią tego, czego potrzebujesz.

Czy musisz martwić się o obrót obiektu? Następnie musisz się martwić o ramiona dźwigni, moment pędu, momenty bezwładności i momenty obrotowe.

Czy musisz się martwić deformacją? Następnie musisz przejść do analizy elementów skończonych, naprężeń/odkształceń itp. -- coś, co opisuje jak obiekty reagują wewnętrznie na zewnętrzne siły.

A co z efektami tarcia? Wtedy będziesz potrzebował współczynników tarcia lub ewentualnie modeli prędkości dla oporu powietrza.

Efekty grawitacyjne? Efekty elektromagnetyczne? Inne siły?

 1
Author: John,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-08-18 16:29:16

Jeśli chcesz uzyskać podstawową odpowiedź na kolizję, oto ona:

for each pair of objects that collide
    ask gently to the collision detection lib their interpenetration distance
    Apply an impulse (i.e. a force in the duration of the frame) to both objects :
        force proportional to penetration depth (you will have to tune the coef by hand)
        direction : perpendicular to the collision normal.
        application point : the collision point (approximately, since it s not a point anymore but a volume)
integrate (Euler, Verlet, )\
 1
Author: Calvin1602,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-08-24 07:23:23

Silniki fizyki są bardzo skomplikowane. Lepiej byłoby użyć istniejącego.

  • Farseer (C#, wywodzący się ze starszej wersji Box2D).
  • Box2d (C++, posiada wiązania. Net)
  • Chipmunk (C, chyba nie ma portu w C#, ale można go zrobić).

Jeśli chcesz używać fizyki w swojej grze, Użyj Farseera lub wiązania Box2D. Jeśli chcesz dowiedzieć się o fizyce, rozważ zrobienie C# portu Box2D, lub Wiewiórka. Jeśli jesteś po prostu ciekawy, cały ich kod jest open source.

 0
Author: deft_code,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-07-16 17:49:42

Ja też Szukałem tych samych informacji, najbardziej użytecznych thing I found so far was

Http://www.myphysicslab.com/collision.html

Najgorsze jest dla mnie tahat to jest bez tarcia (tangent collision impulse tylko normalny impuls) i myślę, że ten z taki impuls tarcia byłby lepszy, ale i tak nie znaleziono poradnika jak poprawnie wdrożyć że

 0
Author: grunge fightr,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-05-17 09:25:55
 -2
Author: gWaldo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-12-21 14:05:01