Làm cách nào để bật FPS cao hơn trong XNA 4.0?


7

Tôi đã tạo một FpsCounter DrawableGameComponent(liên kết với mã, nó rất dài) . Nó hoạt động rất tốt: Nó hiển thị 60.0 khung hình / giây bình thường. Nếu tôi làm chậm vòng lặp trò chơi một cách giả tạo, nó sẽ giảm xuống.

'Trò chơi' của tôi tại thời điểm này là một sprite được điều khiển bằng bàn phím, do đó có thể hiển thị thường xuyên hơn 60 khung hình một giây.

Tôi hình dung tắt đồng bộ hóa dọc sẽ tăng giới hạn FPS:

public Game1()
{
    _graphics = new GraphicsDeviceManager(this)
                    {
                        PreferredBackBufferWidth = WindowWidth,
                        PreferredBackBufferHeight = WindowHeight,
                        SynchronizeWithVerticalRetrace = false,
                    };
    _graphics.ApplyChanges();
    Content.RootDirectory = "Content";
}

Tuy nhiên, mặc dù đoạn mã trên có vẻ như sẽ tắt vsync, nhưng dường như không phải vậy. Có vấn đề gì với nhà xây dựng của tôi, hoặc có lẽ là tính toán FPS của tôi? Hoặc có điều gì khác có thể giới hạn số lượng khung hình?

Câu trả lời:


11

Nếu Game.IsFixedTimeStep là đúng, phương thức cập nhật sẽ được gọi sau mỗi 1/60 giây

http://msdn.microsoft.com/en-us/l Library / microsoft.xna.framework.game.isfixedtimestep.aspx

"Giá trị mặc định cho IsFixedTimeStep là đúng."


1
Tốt hơn rồi đấy. 7k khung hình / giây ahoy!
Matthew Scharley

1
@Mathew, Cũng lưu ý rằng điều này sẽ gọi Update () nhiều lần nữa. Từ một số thử nghiệm sơ bộ, tôi tin rằng các hàm Update () và Draw () được gọi lần lượt là các hàm trong vòng lặp trò chơi. Vì vậy, mong đợi các cuộc gọi 7k Update ().
John McDonald

3

Nó phụ thuộc vào cài đặt thẻ video của bạn (trong Windows). Tôi gặp vấn đề tương tự và hơn tôi thấy rằng thẻ nVidia của tôi có cài đặt vsync riêng trong bảng điều khiển trong đó vsync có thể được đặt thành chế độ bắt buộc (cài đặt ứng dụng sẽ bị bỏ qua trong trường hợp này).


Có thể là một vấn đề, mặc dù kiểm tra nhanh các cài đặt của tôi cho thấy vsync được đặt thành "Sử dụng cài đặt ứng dụng 3D".
Matthew Scharley

Tôi thậm chí đã thử đặt nó thành "Buộc tắt" và vẫn không giúp được gì.
Matthew Scharley

Tôi cũng gặp phải vấn đề này. 'SyncizeWithV verticalRetrace' không ảnh hưởng đến trò chơi ngay cả khi cài đặt nvidia được đặt thành 'Sử dụng cài đặt ứng dụng 3D'. Tôi phải buộc nó đi làm. Tôi tự hỏi nếu đây là một vấn đề với trình điều khiển nVidia hoặc nếu có một cách giải quyết trong XNA? Tôi đang sử dụng FNA (SDL2) và tôi đã có một nVidia 1080 btw.
jsmars
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.