Płytka Fizyka za pomocą Farseer

9

Mam problem z Farseer Physics Engine, w którym w kafelkowym środowisku mój obiekt czasami wchodzi w interakcje z narożnikami innych obiektów, nawet jeśli są idealnie wyrównane.

Płytka Fizyka za pomocą Farseer

Czytałem o ludziach sugerujących, abyś obliczył i stworzył jeden większy obiekt, używając Kwadratów Marszowych lub czegoś podobnego. Nie jest to jednak opcja, ponieważ chciałbym, aby każda płytka miała inne cechy fizyczne, takie jak inne tarcie i restytucja.

Moje pytanie brzmi: co dokładnie to powoduje, czy są to problemy z precyzją typu float, czy coś innego? I czy jest sposób, aby to naprawić, nie psując całego silnika fizyki?

William Mariager
źródło
Zastanawiam się, czy można po prostu rozszerzyć pola kolizji o jeden piksel, aby się nieco zachodziły. Może postrzegać powierzchnię jako bardziej połączoną.
Doug.McFarlane
@Doug: Właśnie to przetestowałem i nie zrobiło to żadnej różnicy.
William Mariager,
Czy płytki gruntowe są ciałami statycznymi?
bummzack
@bummzack: Tak, są.
William Mariager
Mam dokładnie ten sam problem. Efekt odbicia pojawia się, gdy moim ruchomym obiektem jest prostokąt lub okrąg. Nie mogę również przekształcić wielu kwadratów w jeden duży prostokąt, ponieważ chcę, aby gracz miał możliwość „usuwania” poszczególnych płytek w określonych sytuacjach.

Odpowiedzi:

5

Farseer używa iteracyjnego solvera, więc kiedy twoje koło zacznie zderzać się z innym prostokątem z dużą prędkością, od czasu do czasu zobaczysz nierówności, ponieważ jest to „idealne dopasowanie” do nas, a nie do symulacji fizyki, z iteracjami takie rzeczy będą nigdy nie być „perfekcyjnie w pikselach”.

Będziesz musiał przekonwertować prostokąty na kształty krawędzi / pętli, a następnie modelować różne cechy fizyczne za pomocą hacków, takich jak tworzenie sztucznych granic płytek, a następnie zmiana właściwości, gdy postać wejdzie do ramki granicznej, ale nie każda jakość fizyczna może być w ten sposób emulowana.

Wcześniej czy później skończysz pisać własną fizykę opartą na kafelkach zamiast Farseer. Jeśli w twojej grze nie ma wielu skomplikowanych zagadek fizyki, łatwiej będzie całkowicie porzucić Farseer i rzucić własną fizyką opartą na kafelkach.

Dosyć
źródło
Właściwie zacząłem kodować własny silnik fizyki, specjalnie dla tego silnika kafelkowego, ponieważ wydaje się, że nie ma żadnych eleganckich rozwiązań.
William Mariager
Postanowiłem zaznaczyć tę odpowiedź, ponieważ wydaje się, że nie ma prostego rozwiązania, a lepiej będzie, jeśli kodujesz własne rozwiązanie. Albo zaakceptuj, że nie możesz mieć innej fizyki i użyj Marching Squares do tworzenia większych ciał.
William Mariager
0

możesz zoptymalizować kształty kolizji, ta scena może być wykonana tylko z czterema prostokątami.

możesz dołączyć pola korelacyjne, aby zwiększyć jeden.

ten film pokazuje to http://www.youtube.com/watch?v=eyhGckHgkkE

podczas dodawania pól widać jasnoniebieski prostokąt o zoptymalizowanym kształcie.

Blau
źródło
1
Jak powiedziałem w trzecim akapicie, przekształcenie grupy obiektów w większy obiekt nie jest opcją, ponieważ straciłbym indywidualne właściwości.
William Mariager,
możesz je pogrupować według właściwości fizykochemicznych. myślę, że nie jest zbyt często, aby mieć wiele różnych fizycznych bloków razem.
Blau
Pogrupowanie ich według cech fizycznych dałoby mi ten sam problem, jeśli teren bardzo się zmienia na odcinku. To może być niezwykłe, ale mimo wszystko tego potrzebuję.
William Mariager
0

Hmm ... Podejrzewam, że to może mieć coś wspólnego z twoim kręgiem, a nie z płytkami pod nim. Spróbuj wylądować za pomocą pojedynczego kadłuba i sprawdź, czy uzyskasz takie same wyniki. Jeśli nie, to takie płytki, jak podejrzewasz. Jeśli tak, twoje koło nie jest tak okrągłe, jak mogłoby się wydawać.

John McDonald
źródło
Testowałem to. Za pomocą jednego dużego prostokąta nie ma problemów.
William Mariager
k, W takim razie problemem są kafelki
John McDonald