2013-04-21 16 views
7

Piszę silnik gry Final Fantasy, z tła 2D i modeli 3D z Irrlicht. Aby obliczyć kolizje z obiektami w tle używam niewidoczną siatkę tak:Kolizja Irrlicht z niewidoczną siatką

enter image description here

Próbowałem z tego kodu, ale gdy gracz osiągnie krawędź siatki to spada:

TriangleSelector sel = device.SceneManager.CreateTriangleSelector(Program.field.currentScene.walkmeshLoaded, null); 
CollisionResponseSceneNodeAnimator coll = device.SceneManager.CreateCollisionResponseAnimator(sel, playerNode); 
playerNode.AddAnimator(coll); 
coll.Drop(); 
sel.Drop(); 

Odpowiedz

1

Nie użyłem systemu, którego używasz, ale minęły dwa dni, więc pomyślałem, że oddam strzał w ciemności. Jeśli czytam to poprawnie, to brzmi to tak, jakbyś używał predefiniowanego systemu i siatki w nim. Kiedy obiekt gracza przechodzi do krawędzi siatki, spada z siatki, prawda?

To, co brzmi, to fakt, że używany silnik ma grawitację sortowania, a ta siatka znajduje się powyżej dolnego poziomu, jeśli taki występuje. Pomyśl o siatce jak o moście; jeśli odejdziesz od krawędzi, odpadniesz. Możesz zrobić ustawienie ścian wzdłuż krawędzi siatki, aby gracz nie spadł z mostu lub, jeśli silnik na to pozwala, ustawić kolizję na siatce, która uniemożliwi graczom przekroczenie krawędzi. Późniejszy byłby lepszy pomysł, ponieważ zakładam, że będziesz chciał, aby wrogowie i NPC-y podążali tymi samymi ścieżkami, a ściany są po prostu wykrywaniem kolizji (i mogłyby przeszkadzać w atakowaniu wrogów).

Wiem, że to nie jest dokładna odpowiedź, ale mam nadzieję, że pojawi się tam kilka pomysłów. Może jestem daleko, ale to, o czym myślę, dzieje się z dostarczonych informacji.

Powiązane problemy