Tworzę platformówkę RPG dla jednego gracza w XNA 4.0. Chciałbym dodać zdolność, która sprawi, że czas „zatrzyma się” lub zwolni, i sprawi, że tylko postać gracza porusza się z oryginalną prędkością (podobną do zaklęcia Czas zatrzymania z serii Baldur's Gate). Nie szukam dokładnej implementacji, a raczej ogólnych pomysłów i wzorców projektowych.
EDYCJA: Dziękuję wszystkim za wspaniały wkład. Wymyśliłem następujące rozwiązanie
public void Update(GameTime gameTime)
{
GameTime newGameTime = new GameTime(gameTime.TotalGameTime,
new TimeSpan(gameTime.ElapsedGameTime.Ticks / DESIRED_TIME_MODIFIER));
gameTime = newGameTime;
lub coś podobnego. W ten sposób mogę ustawić inny czas dla komponentu odtwarzacza i inny dla reszty. Z pewnością nie jest wystarczająco uniwersalny, aby działać w grze, w której taki czas wypaczenia byłby centralnym elementem, ale mam nadzieję, że powinien on działać w tym przypadku. Nie podoba mi się to, że zaśmieca główną pętlę aktualizacji, ale z pewnością jest to najłatwiejszy sposób na jej wdrożenie. Myślę, że to w zasadzie to samo, co sugerował tesselode, więc dam mu zielony haczyk :)