SDL_WarpCursor () kullanarak bunu uygulayabilirsiniz, ancak bazı platformlarda bu yöntemle ilgili sorunlar yaşadım. Bazı platformlarda, özellikle her kareyi çağırdığımda, WarpCursor () eylemini güvenilir bir şekilde gerçekleştiremediğimde gerçek sorunlar yaşadım.
Ayrıca, birçok platformda imlecin uygulamanızdan daha yüksek bir frekansta işlendiğini unutmayın. Bu özellikle 60 fps'nin altında koşuyorsanız geçerlidir! Bu nedenle platform, oyununuzun her karesinde fareyi başarıyla çarpıştırsa bile, oluşturulan çerçeveleriniz arasında güncellemeler alıyorsa imleç pencerenizden uzaklaşabilir.
Fareyi SDL altında yakalamak için doğru yöntem:
SDL_WM_GrabInput( SDL_GRAB_ON );
Bu, SDL'ye niyetinizin aslında fare + klavyenin tam kontrolünü ele geçirmek olduğunu ( belgelere bakın ) ve bu nedenle fareyi ne olursa olsun pencerenin içinde tutmak olduğunu söyler . Bu noktadan itibaren, kare hızınızdan bağımsız olarak fare pencerenin dışına taşınmaz ve imleci sürekli olarak spam yapmak yerine bir yere ışınlamak istemiyorsanız, SDL_WarpCursor öğesini çağırmamalısınız.
Bu "kapma" modundayken, fare hareket olaylarını, fare pencerenin içinde kısıtlanmamış gibi almaya devam edeceksiniz. (Dolayısıyla, imleç ekranın sağ kenarındaysa ve kullanıcı faresini daha sağa hareket ettirirse, imleç konumu değişmeyecek olsa da, sağda hareket gösteren bir fare hareketi olayı alırsınız). Bu, mutlak konumunu değil imlecin yalnızca göreceli hareketini önemsediğiniz FPS oyunları için kontrolleri çevirmek (örneğin) için gerçekten yararlıdır.
SDL2 Güncelleştirmesi - 9 Aralık 2013
Bu arayüz SDL2 için değişti. SDL1.2 kullanıyorsanız, yukarıdaki cevap hala doğrudur. Ancak, SDL2 altında SDL_WM_GrabInput(SDL_GrabMode)
işlev artık kullanılamaz. SDL2'nin fareyi yakalamanın yeni yolu:
SDL_SetRelativeMouseMode(SDL_TRUE);
Aksi takdirde, bu önceki işlevle aynıdır - bu modda SDL_MOUSEMOTION
fare pencerenin içinde kısıtlanmamış gibi olaylar almaya devam edersiniz .