Używam C # / XNA i kilkakrotnie powiedziano mi, aby nie mieszać kodu aktualizacji z rysowanym kodem - i jestem pewien, że nie! Ale czy ktoś mógłby opisać, czym dokładnie jest „kod logiczny”?
Jak widać tutaj: http://blogs.msdn.com/b/shawnhar/archive/2007/07/25/understanding-gametime.aspx
[...] upewnij się, że umieściłeś całą logikę gry w metodzie aktualizacji (nie w Draw!), a wszystko będzie działało z niezłą stałą prędkością.
Pytam o to, ponieważ szybkość mojej gry zmienia się w stosunku do FPS. Wolne FPS to wolno poruszające się obiekty i odwrotnie. I tak, dołączam oczekiwany position += speed * (float)gt.ElapsedGameTime.TotalSeconds;
kod.
To jest prawdopodobnie duże pytanie dla początkujących, ale po prostu chcę mieć absolutną jasność co do definicji tego.
gt.ElapsedGameTime.TotalSeconds
upłynęła liczba sekund, które upłynęły od uruchomienia programu (gry). Jeśli pomnożysz przez to prędkość, to po 5 sekundach gry prędkość będzie 5 razy większa (z wyjątkiem specjalnego przypadku, w którym prędkość jest ustawiona na 0). Nie jestem pewien, co jeszcze mogłoby to spowodować, że to nieprawda, ale jestem zaintrygowany.
iii
że ręcznie zwiększam każdą aktualizację, ponieważ nie chcę tego w kilka sekund, chcę kroki lub ramki. Widzę jednak, że twój sposób jest prawidłowym sposobem kodowania miękkiego.
position = speed * ...TotalSeconds
. Zauważ, że to=
nie jest+=
. Gdyby było+=
tak, jak piszesz, twoja pozycja spadłaby z ekranu niemal natychmiast.