コード例 #1
0
        /// <summary>
        ///     Handles limiting the game's FPS when the window isn't active.
        /// </summary>
        private void LimitFpsOnInactiveWindow()
        {
            if (CurrentScreen != null && CurrentScreen.Exiting)
            {
                return;
            }

            if (!IsActive && WindowActiveInPreviousFrame && OtherGameMapDatabaseCache.OnSyncableScreen() ||
                OtherGameMapDatabaseCache.OnSyncableScreen() && !IsActive && !WindowActiveInPreviousFrame)
            {
                InactiveSleepTime = TimeSpan.FromSeconds(1d / 30);
            }
            // Restore user's settings
            else if (!WindowActiveInPreviousFrame && (IsActive || !OtherGameMapDatabaseCache.OnSyncableScreen()))
            {
                InactiveSleepTime = TimeSpan.Zero;
                InitializeFpsLimiting();
            }

            WindowActiveInPreviousFrame = IsActive;
        }
コード例 #2
0
        /// <summary>
        ///     Handles limiting the game's FPS when the window isn't active.
        /// </summary>
        private void LimitFpsOnInactiveWindow()
        {
            if (CurrentScreen != null && CurrentScreen.Exiting)
            {
                return;
            }

            if (!IsActive && WindowActiveInPreviousFrame && OtherGameMapDatabaseCache.OnSyncableScreen() ||
                OtherGameMapDatabaseCache.OnSyncableScreen() && !IsActive && !WindowActiveInPreviousFrame)
            {
                Graphics.SynchronizeWithVerticalRetrace = false;
                TargetElapsedTime = TimeSpan.FromSeconds(1d / 30);
                IsFixedTimeStep   = true;
            }
            // Restore user's settings
            else if (!WindowActiveInPreviousFrame && (IsActive || !OtherGameMapDatabaseCache.OnSyncableScreen()))
            {
                InitializeFpsLimiting();
            }

            WindowActiveInPreviousFrame = IsActive;
        }