আপনি SDL_WarpCursor () ব্যবহার করে এটি বাস্তবায়ন করতে গিয়ে আমি কিছু প্ল্যাটফর্মগুলিতে সেই পদ্ধতিটি নিয়ে সমস্যায় পড়েছি। কিছু প্ল্যাটফর্মের সাথে ওয়ার্পকার্সার () ক্রিয়াটি নির্ভরযোগ্যভাবে সম্পাদন না করার ক্ষেত্রে আমার আসল সমস্যা হয়েছিল, বিশেষত যখন আমি প্রতিটি ফ্রেমকে কল করে যাচ্ছি।
এছাড়াও, মনে রাখবেন যে অনেক প্ল্যাটফর্মে কার্সারটি আপনার অ্যাপ্লিকেশন থেকে উচ্চতর ফ্রিকোয়েন্সি এ পরিচালনা করা হয়। আপনি যদি 60fps এর নিচে চলেছেন এটি বিশেষত সত্য! সুতরাং এমনকি যদি প্ল্যাটফর্মটি আপনার গেমের প্রতিটি ফ্রেমে সাফল্যের সাথে মাউসকে আবদ্ধ করে, কার্সারটি এখনও আপনার উইন্ডো থেকে দূরে যেতে পারে যদি এটি আপনার রেন্ডার করা ফ্রেমগুলির মধ্যে আপডেট পেয়ে থাকে।
এসডিএল এর আওতায় মাউস আটকে দেওয়ার সঠিক পদ্ধতিটি হ'ল:
SDL_WM_GrabInput( SDL_GRAB_ON );
এটি এসডিএলকে বলে যে আপনার উদ্দেশ্যটি হ'ল মাউস + কীবোর্ডের সম্পূর্ণ নিয়ন্ত্রণ দখল করা ( ডকুমেন্টেশন দেখুন ), এবং তাই মাউসটিকে উইন্ডোতে রেখেই যাই হোক না কেন। এই বিন্দু থেকে, মাউস আপনার ফ্রেমের হার নির্বিশেষে উইন্ডোর বাইরে চলে না, এবং আপনি যদি অবিচ্ছিন্নভাবে স্প্যামিং না করে কার্সারটিকে অন্য কোথাও টেলিপোর্ট করার উদ্দেশ্যে করেন তবে ব্যতীত আপনার এসডিএল_ওয়ার্পকার্সার কল করা উচিত নয়।
এই "দখল" মোডে থাকাকালীন, আপনি মাউস মোশন ইভেন্টগুলি গ্রহণ করতে থাকবে যেমন উইন্ডোর ভিতরে মাউসকে বাধা দেওয়া হয়নি। (সুতরাং যদি কার্সারটি স্ক্রিনের ডান প্রান্তে থাকে এবং ব্যবহারকারী তার মাউসকে আরও ডান দিকে সরান, আপনি ডানদিকে গতি দেখানোর জন্য একটি মাউস মোশন ইভেন্ট পাবেন, যদিও কার্সারের অবস্থান পরিবর্তন হবে না)। এটি এফপিএস গেমগুলির জন্য নিয়ন্ত্রণ ঘুরিয়ে দেওয়ার জন্য (উদাহরণস্বরূপ) দরকারী, যেখানে আপনি কেবল কার্সারের আপেক্ষিক গতি সম্পর্কে চিন্তা করেন, এর সম্পূর্ণ অবস্থান নয়।
এসডিএল 2 - 9 ডিসেম্বর, 2013-র জন্য আপডেট
এই ইন্টারফেসটি এসডিএল 2 এর জন্য পরিবর্তিত হয়েছে। আপনি যদি এসডিএল 1.2 ব্যবহার করছেন তবে উপরের উত্তরগুলি এখনও সঠিক। তবে এসডিএল 2 এর অধীনে SDL_WM_GrabInput(SDL_GrabMode)
ফাংশনটি আর উপলব্ধ নেই। মাউস ক্যাপচার করার জন্য এসডিএল 2 এর নতুন উপায় হ'ল:
SDL_SetRelativeMouseMode(SDL_TRUE);
অন্যথায়, এটি পূর্ববর্তী ফাংশনের অনুরূপ - এই মোডে আপনি SDL_MOUSEMOTION
ইভেন্টগুলি গ্রহণ করতে থাকবেন যেন মাউস উইন্ডোর ভিতরে আবদ্ধ ছিল না।