Autor Wątek: Brak synchronizacji  (Przeczytany 3129 razy)

Offline jelcynek

  • Użytkownik

# Marzec 14, 2014, 23:19:05
Cytuj
rly? delta od ostatniej ramki będzie taka sama ale jej nie używasz. patrząc po nazwie funkcji to gameTime.ElapsedGameTime.TotalSeconds powinno zwracać za każdym razem inny (większy) rezultat

rly. Chociaż nazwa może być myląca ElapsedGameTime to czas od ostatniej ramki.
http://msdn.microsoft.com/en-us/library/microsoft.xna.framework.gametime.elapsedgametime.aspx

Cytuj
Zamiast iteracyjnie zmieniać pozycję, określ ich pozycję jako okresową funkcję położenia od czasu. Albo poruszaj tylko pierwszym obiektem, a resztę ustaw na pozycję pierwszego plus stałe przesunięcie.

Jest to jakieś rozwiązanie. Chociaż w pierwszej kolejności chciałem znaleźć rozwiązanie ogólne, a nie szczególne. 

Cytuj
Nie jedynym, ale ma realną szansę być jednym z najprostszych w implementacji.

Strasznie mnie to zaskoczyło. W zasadzie floating-point jest szeroko stosowany we wszystkich tutorialach, przykładach, a tutaj zawodzi w tak prostym przypadku. Od następnego projektu na pewno przerzucę się na fixed point bo widzę przewagę plusów. W tym przypadku muszę rozpatrzyć czy nie lepiej (choć mniej elegancko) i taniej (jeśli chodzi o czas) będzie zastosować jakiegoś hacka dla tego przypadku.

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

Offline koirat

  • Użytkownik

  • +1
# Marzec 14, 2014, 23:24:48
Od następnego projektu na pewno przerzucę się na fixed point bo widzę przewagę plusów.
Po prostu nie rób tego.

Offline Krzysiek K.

  • Redaktor
    • DevKK.net

# Marzec 14, 2014, 23:46:56
Cytuj
Strasznie mnie to zaskoczyło. W zasadzie floating-point jest szeroko stosowany we wszystkich tutorialach, przykładach, a tutaj zawodzi w tak prostym przypadku.
Nie. To nie jest przypadek, który jest "prosty" dla floatów. Masz różne początkowe wartości floatów, a potem robisz na nich animację i logikę i spodziewasz się, że zostaną in-sync. Małe szanse, bo sumowanie różnych wartości ma prawo dawać różne błędy zaokrągleń, które będą się kumulować.

Inna kwestia, że tutoriale z reguły są pisane dla ludzi początkujących/średniozaawansowanych, więc będą przedstawiały rozwiązania i metody mniej więcej takiej złożoności. W dodatku często będą stosowały filozofię "byle działało".

Cytuj
Jest to jakieś rozwiązanie. Chociaż w pierwszej kolejności chciałem znaleźć rozwiązanie ogólne, a nie szczególne.
Ogólnym jest właśnie dobrze* zaimplementowany fixed point, w którym dodawanie będzie rzeczywiście operacją łączną (we floatach nie jest).

*) Trzeba tylko uważać przy mnożeniach i dzieleniach z zaokrąglaniem wyników ujemnych.

Cytuj
Od następnego projektu na pewno przerzucę się na fixed point bo widzę przewagę plusów.
A jaki problem zrobić to w tym projekcie?

Offline Xirdus

  • Redaktor

# Marzec 15, 2014, 00:24:36
Jest to jakieś rozwiązanie. Chociaż w pierwszej kolejności chciałem znaleźć rozwiązanie ogólne, a nie szczególne.
A co tu jest nieogólnego? Za każdym razem gdy masz grupę jednocześnie poruszających się obiektów, możesz położenie obiektów w tej grupie przedstawić jako położenie jednego z nich + offsety reszty. I zawsze jak masz ściśle określoną ścieżkę poruszania się, możesz przedstawić ruch jako funkcję położenia od czasu.