Tôi đang sử dụng C # và đang cố lấy vị trí chuột phần cứng. Điều đầu tiên tôi đã thử là chức năng XNA đơn giản, dễ sử dụng
Vector2 position = new Vector2(Mouse.GetState().X, Mouse.GetState().Y);
Sau đó, tôi cũng vẽ chuột và so sánh với chuột phần cứng windows, con chuột mới này với tọa độ xna được cung cấp là "chùng xuống". Ý tôi là, nó ở đằng sau vài khung hình. Ví dụ: nếu trò chơi đang chạy ở tốc độ 600 khung hình / giây, thì lời nguyền sẽ phản ứng nhanh, nhưng ở tốc độ 60 khung hình / giây, độ trễ chuột không còn được chấp nhận. Vì vậy, tôi đã thử sử dụng những gì tôi nghĩ là một con chuột phần cứng,
[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool GetCursorPos(out POINT lpPoint);
nhưng kết quả hoàn toàn giống nhau Tôi cũng đã thử lấy con trỏ biểu mẫu Windows và đó cũng là một ngõ cụt - hoạt động tốt, nhưng với cùng độ trễ. Loay hoay với chức năng xna:
GraphicsDeviceManager.SynchronizeWithVerticalRetrace = true/false
Game.IsFixedTimeStep = true/fale
đã thay đổi thời gian trì hoãn vì những lý do rõ ràng, nhưng điểm mấu chốt là bất kể nó vẫn đứng sau chuột Windows mặc định. Tôi đã thấy trong một số trò chơi, họ cung cấp tùy chọn cho chuột được tăng tốc phần cứng và trong các trò chơi khác (tôi nghĩ) nó đã được mặc định. Bất cứ ai có thể đưa ra một số dẫn về làm thế nào để đạt được điều đó.
Mouse.GetState()
không bị hỏng và miễn là IsFixedTimeStep == true
mọi người không thể thấy độ trễ trừ khi so sánh trực tiếp với chuột cửa sổ có thể nhìn thấy. Tuy nhiên, cài đặt IsFixedTimeStep thành false ở tốc độ khung hình thấp hơn, nó sẽ hiển thị với mọi người. Về đầu vào trực tiếp tôi coi đó là một khả năng (phương sách cuối cùng).
Mouse.GetState()
là bị hỏng. Bạn có chắc chắn rằng bạn đang có được vị trí chuột trong cùng một khung với bạn đang vẽ nó không? Cũng nên nhớ rằng con trỏ Windows đã kích hoạt tăng tốc / giảm tốc, do đó, nó cảm thấy nhạy hơn. Nếu bạn muốn đến gần hơn với phần cứng, bạn nên nhấn DirectInput, điều này sẽ cung cấp cho bạn các vùng chuyển động thay vì vị trí chuột tuyệt đối. Nhưng tôi tin rằngMouse.GetState()
vẫn là cách chính xác để làm điều đó trong XNA.