Trong khi bạn có thể thực hiện điều này bằng SDL_WarpCthon (), tôi đã gặp vấn đề với phương thức đó trên một số nền tảng. Tôi đã gặp vấn đề thực sự với một số nền tảng không thực hiện đáng tin cậy hành động WarpCthon (), đặc biệt khi tôi gọi nó là mọi khung hình.
Ngoài ra, hãy nhớ rằng trên nhiều nền tảng, con trỏ được xử lý với tần suất cao hơn ứng dụng của bạn. Điều này đặc biệt đúng nếu bạn đang chạy dưới 60fps! Vì vậy, ngay cả khi nền tảng đang vênh chuột thành công trên mọi khung hình trong trò chơi của bạn, con trỏ vẫn có thể rời khỏi cửa sổ của bạn nếu nó nhận được cập nhật ở giữa các khung được hiển thị của bạn.
Phương pháp chính xác để bẫy chuột theo SDL là:
SDL_WM_GrabInput( SDL_GRAB_ON );
Điều này cho SDL biết rằng ý định của bạn là thực sự giành toàn quyền kiểm soát chuột + bàn phím (xem tài liệu hướng dẫn ) và do đó giữ chuột bên trong cửa sổ bất kể điều gì. Từ thời điểm này, chuột sẽ không di chuyển ra ngoài cửa sổ, bất kể tốc độ khung hình của bạn là bao nhiêu và bạn không nên gọi SDL_WarpCoder, trừ khi bạn thực sự có ý định dịch chuyển con trỏ đi đâu đó, thay vì spam liên tục.
Trong khi ở chế độ "lấy" này, bạn sẽ tiếp tục nhận các sự kiện chuyển động của chuột như thể chuột không bị gò bó trong cửa sổ. (Vì vậy, nếu con trỏ ở cạnh phải của màn hình và người dùng di chuyển chuột sang phải hơn, bạn sẽ nhận được một sự kiện chuyển động chuột hiển thị chuyển động sang phải, mặc dù vị trí con trỏ sẽ không thay đổi). Điều này thực sự hữu ích cho (ví dụ) điều khiển xoay cho các trò chơi FPS, trong đó bạn chỉ quan tâm đến chuyển động tương đối của con trỏ, chứ không phải vị trí tuyệt đối của nó.
Cập nhật cho SDL2 - ngày 9 tháng 12 năm 2013
Giao diện này đã thay đổi cho SDL2. Nếu bạn đang sử dụng SDL1.2, câu trả lời ở trên vẫn đúng. Tuy nhiên, dưới SDL2, SDL_WM_GrabInput(SDL_GrabMode)
chức năng không còn khả dụng. Cách mới để bắt chuột của SDL2 là:
SDL_SetRelativeMouseMode(SDL_TRUE);
Mặt khác, chức năng này giống hệt với chức năng trước đó - trong chế độ này, bạn sẽ tiếp tục nhận SDL_MOUSEMOTION
các sự kiện như thể con chuột không bị hạn chế bên trong cửa sổ.