Autor Wątek:  Pytanie do dewelopera  (Przeczytany 590 razy)

0 użytkowników i 1 Gość przegląda ten wątek.

Offline Necronomicron

  • Wiadomości: 2
    • Zobacz profil
  • Otrzymane polubienia: 3
Pytanie do dewelopera
« dnia: 12 Grudnia 2024, 16:15:33 »
Cześć!
Mam pytanie do dewelopera.
Która część kodu jest odpowiedzialna za pozycjonowanie wózka na szynach i za pozycjonowanie wagonu w całości?
Dziękuję!
« Ostatnia zmiana: 12 Grudnia 2024, 16:17:00 wysłana przez Necronomicron »

Offline Ra

  • Zasłużony dla Symulatora
  • Wiadomości: 6345
  • Ostatni gasi światło...
    • Zobacz profil
    • Instalator+Starter+Edytor
  • Otrzymane polubienia: 377
Odp: Pytanie do dewelopera
« Odpowiedź #1 dnia: 12 Grudnia 2024, 18:44:14 »
Bardzo dziękuję za to pytanie!

Nie wiem, jak to jest robione teraz. Ale na samym początku było tak, że każda oś miała swój osobny obiekt, na wózek były dwie osie, a z ich wzajemnego położenia były wyznaczane wektory: styczny i prostopadły do toru (dodatkowo wyliczanie tych wektorów z osi było uzależnione od FPS albo ustawień w INI, co robiło masę dodatkowych problemów). Ponieważ 4 osie na pojazd robiły problemy z obsługą eventów przy zmianie kierunku jazdy na łączeniu torów (zmieniała się oś decydująca o przypisaniu pojazdu do odcinka toru), tymczasowo uprościłem ten mechanizm do dwóch osi na pojazd, a wektory zacząłem wyliczać ze wzoru na pochodne krzywej Béziera. Kwestia osi decydującej była związana z obsługą zajętości torów i czymś jeszcze, czego nie pamiętam (być może wyliczania odległości od sygnałów). Co do zasady osią decydującą była pierwsza od kierunku jazdy, natomiast po zmianie kierunku jazdy oś decydująca musiała przełączać się dopiero na odpowiednio długim torze, na którym obie osie mogły się znajdować jednocześnie. Redukcja do dwóch osi była tymczasowa, tzn. po uporaniu się ze wszystkim problemami z prowadzeniem pojazdów po torach planowałem przywrócić obsługę dowolnej liczby osi (podanej w FIZ), żeby możliwe były poślizgi pojedynczych osi, a także aby obsługiwać "dostosowania sił do nacisku kół".

Drugi problem z osiami był taki, że każda mogła pojechać innym torem i wtedy pudło pojazdu znajdowało się po środku, często doprowadzając do lewitacji. Przyczyna była taka, że osie zawsze były przesuwane o stałą odległość, wynikającą z prędkości i czasu kroku fizyki. W szczególności się to objawiło po uruchomieniu skrzyżowań, kiedy każda oś samochodu wylosowała inny kierunek. Postanowiłem to naprawić wprowadzając stałą odległość pomiędzy wózkami, co doprowadzałoby do wykolejenia po zbyt dużym rozjechaniu wózków na różne tory, a w przypadku samochodów zawsze ciągnęłoby tylną oś za pierwszą. Jednocześnie stała odległość pomiędzy wózkami pozwoliłaby na prawidłowe liczenie zwiększonych oporów jazdy na łukach, a także sensowniejsze liczenie sił na zderzakach oraz sprzęgach.

Trzeci problem, to zbędność skomplikowanych obliczeń dla krzywych Béziera, które w 90% przypadków można by uprościć do okręgu. Odpada wtedy przybliżanie łuku okręgu łamaną i różne inne absurdalne kombinacje (np. z liczeniem długości i wyznaczaniem momentu przejechania na sąsiedni tor).

Czwarty problem związany z osiami był widoczny w postaci niedopasowania kół do szyn (przesunięcie w bok). Nie pamiętam szczegółów, ale na pewno było to motywacją do zabrania się z obliczenia związane z prowadzeniem osi. Chyba też występowały problemy na złożeniu łuków pionowych w łukami w planie, gdzie promienie łuków pionowych są orientacyjnie 10 razy większe od promieni łuków w planie, gdy tymczasem długość wektorów kontrolnych może być powiązana tylko z jednym promieniem. Mogę się mylić, gdyż nie mam tego przemyślanego do końca, ponieważ szczegółowe analizy przełożyłem na później i nigdy ich nie wykonałem (nie jestem odpowiedzialny za prawidłowość obliczeń w MaSzynie).

Niestety, w czasie moich prac nad poprawą pozycjonowania wózków okazało się natychmiastowo niezbędne "odhamowanie rozwoju" poprzez opublikowanie kodu wraz ze zniszczeniem używanych przeze mnie narzędzi, a moje prace zostały nazwane brakiem przejrzystości i sabotażem. Od tej pory dalszą pracą nad kodem miały się zająć inne osoby, których wskazać nie potrafię. Później nikt mnie nawet nie pytał, nad czym pracowałem ani jakie plany miałem wobec poszczególnych rozwiązań, więc pewnie inni są dużo lepiej zorientowani w tych zagadnieniach.

Nie wiem, czy nadal możliwe jest rozjechanie wózków pojazdów kolejowych na różne tory bez wykolejenia, bo dawno tego nie sprawdzałem. Wydaje mi się, że lewitujące samochody jeszcze niedawno widziałem (nie pobrałem jeszcze tegorocznej paczki, a nie wydaje mi się, żebym zauważył poprawienie tego na liście wprowadzonych zmian). Również mam pytanie do dewelopera, czy opisany wyżej bałagan z prowadzeniem osi i wózków został doprowadzony do jakiegoś sensownego stanu? Być może jest gdzieś szczegółowa analiza tych problemów w ukrytych działach, albo dyskusja się odbyła na czacie? Chciałbym o tym poczytać więcej i będę wdzięczny za wskazanie. Dziękuję!

Regulamin, zakazy 23, obowiązki 1, 11.
+10
« Ostatnia zmiana: 12 Grudnia 2024, 19:52:08 wysłana przez Miłosz Dorsz »
¯\_( ͡° ͜ʖ ͡°)_/¯ Ra

Polecam: kręgarz Wojciech Walczak, projekt masarni

Offline Miłosz Dorsz

  • Administrator
  • Wiadomości: 1438
    • Zobacz profil
  • Otrzymane polubienia: 3758
Odp: Pytanie do dewelopera
« Odpowiedź #2 dnia: 12 Grudnia 2024, 19:31:21 »
Która część kodu jest odpowiedzialna za pozycjonowanie wózka na szynach i za pozycjonowanie wagonu w całości?

Pliki DynObj.h i DynObj.cpp. https://github.com/eu07/
Projekty skończone i potencjalnie przyszłe: KLIK

Offline Kermit

  • Wiadomości: 608
    • Zobacz profil
  • Otrzymane polubienia: 1182
Odp: Pytanie do dewelopera
« Odpowiedź #3 dnia: 12 Grudnia 2024, 20:26:39 »
Cytuj
Chciałbym o tym poczytać więcej i będę wdzięczny za wskazanie. Dziękuję!
A dobrze

Offline Necronomicron

  • Wiadomości: 2
    • Zobacz profil
  • Otrzymane polubienia: 3
Odp: Pytanie do dewelopera
« Odpowiedź #4 dnia: 14 Grudnia 2024, 17:40:59 »
Używanie krzywych Béziera dla kolei nie jest dobrym pomysłem, ale rozumiem, że przepisanie wszystkiego na obecnym etapie gry będzie dość trudne.
Kiedyś robiłem grę 2D o tramwajach (nie skończyłem), miałem jeden wózek prowadzący, który poruszałem koleją, a położenie pozostałych wózków obliczałem względem pierwszego. Ale w 2D jest to o wiele łatwiejsze. Również moja kolej była doubly linked list (C#), więc wyszukiwanie było szybkie i tanie.
Następnie robiłem prototyp w 3D na UE5, w przybliżeniu to samo, ale obliczałem pozycję pozostałych wózków za pomocą wyszukiwania binarnego. Ale był już problem, że w łukach wózek przesuwał się w bok.