একটি ভাল FPS গেমিং অভিজ্ঞতা প্রদান করতে মাউস ত্বরণ অক্ষম করুন৷

পয়েন্টার ইভেন্টগুলি ক্যাপচার করার সময় ওয়েব অ্যাপগুলি এখন মাউস ত্বরণ অক্ষম করতে পারে৷

ফ্রাঁসোয়া বিউফোর্ট
François Beaufort

একটি মাউস বা ট্র্যাকপ্যাড ব্যবহার করার সময় স্ক্রীনে পয়েন্টার সরানোর জন্য ত্বরিত আন্দোলন হল একটি ergonomic বৈশিষ্ট্য। এটি ধীরে ধীরে নড়াচড়া করে সুনির্দিষ্ট নড়াচড়ার অনুমতি দেয় এবং পয়েন্টারকে দ্রুত সংক্ষিপ্ত গতির সাথে পুরো স্ক্রীন অতিক্রম করার অনুমতি দেয়। বিশেষ করে, আপনি মাউস নাড়াচাড়া করার জন্য একই শারীরিক দূরত্বের জন্য, যদি দূরত্বটি দ্রুত ভ্রমণ করা হয় তবে স্ক্রিনের পয়েন্টারটি আরও ভ্রমণ করে।

অপারেটিং সিস্টেম ডিফল্টরূপে মাউস ত্বরণ সক্ষম করে। কিছু প্রথম পক্ষের দৃষ্টিকোণ গেমের জন্য, সাধারণত ফার্স্ট-পারসন শুটার (FPS), ত্বরণ সমন্বয় ছাড়াই ক্যামেরার ঘূর্ণন নিয়ন্ত্রণ করতে কাঁচা মাউস ইনপুট ডেটা ব্যবহার করা হয়। একই শারীরিক গতি, ধীর বা দ্রুত, একই ঘূর্ণনের ফলাফল। এর ফলে পেশাদার গেমারদের মতে আরও ভালো গেমিং অভিজ্ঞতা এবং উচ্চতর নির্ভুলতা পাওয়া যায়।

Windows 10 সেটিংসে পয়েন্টার মোশন কন্ট্রোলের স্ক্রিনশট।
Windows 10 সেটিংসে পয়েন্টার মোশন কন্ট্রোল।

Chrome 88 থেকে শুরু করে, আপডেট করা পয়েন্টার লক এপিআইকে ধন্যবাদ, ওয়েব অ্যাপগুলি দ্রুতগতিতে এবং নন-অ্যাক্সিলারেটেড মাউস মুভমেন্ট ডেটার মধ্যে পিছনে যেতে পারে৷

ওয়েব-ভিত্তিক গেমিং প্ল্যাটফর্ম যেমন Google Stadia এবং Nvidia GeForce Now ইতিমধ্যে FPS গেমারদের খুশি করতে এই নতুন ক্ষমতাগুলি ব্যবহার করে৷

ব্রাউজার সমর্থন

  • ক্রোম: 37।
  • প্রান্ত: 13।
  • ফায়ারফক্স: 50।
  • সাফারি: 10.1।

উৎস

API ব্যবহার করে

একটি পয়েন্টার লক অনুরোধ করুন

একটি পয়েন্টার লক হল ক্যানোনিকাল শব্দ যখন একটি ডেস্কটপ অ্যাপ্লিকেশন পয়েন্টার আইকন লুকিয়ে রাখে এবং অন্য কিছুর জন্য মাউসের গতি ব্যাখ্যা করে, যেমন একটি 3D বিশ্বের চারপাশে তাকানো।

mousemove ডকুমেন্ট ইভেন্ট থেকে movementX এবং movementY অ্যাট্রিবিউট আপনাকে বলে যে শেষ মুভ ইভেন্ট থেকে মাউস পয়েন্টার কতটা সরেছে। যাইহোক, যখন পয়েন্টার ওয়েব পৃষ্ঠার বাইরে চলে যায় তখন সেগুলি আপডেট হয় না।

document.addEventListener("mousemove", (event) => {
  console.log(`movementX: ${event.movementX} movementY: ${event.movementY}`);
});

মাউস পয়েন্টার ক্যাপচার করা (অথবা একটি পয়েন্টার লক অনুরোধ করা) আপনাকে পয়েন্টারটি আর বাইরে চলে যাওয়ার বিষয়ে চিন্তা করতে দেয় না। এটি নিমজ্জিত ওয়েব গেমগুলির জন্য বিশেষভাবে কার্যকর। পয়েন্টার লক করা হলে, সমস্ত মাউস ইভেন্ট পয়েন্টার লকের টার্গেট এলিমেন্টে যায়।

পয়েন্টার লকের অনুরোধ করতে টার্গেট এলিমেন্টে requestPointerLock() এ কল করুন এবং পয়েন্টার লক পরিবর্তনগুলি নিরীক্ষণ করতে pointerlockchange এবং pointerlockerror ইভেন্টগুলি শুনুন।

const myTargetElement = document.body;

// Call this function to request a pointer lock.
function requestPointerLock() {
  myTargetElement.requestPointerLock();
}

document.addEventListener("pointerlockchange", () => {
  if (document.pointerLockElement) {
    console.log(`pointer is locked on ${document.pointerLockElement}`);
  } else {
    console.log("pointer is unlocked");
  }
});

document.addEventListener("pointerlockerror", () => {
  console.log("pointer lock error");
});

মাউস ত্বরণ অক্ষম করুন

মাউস ত্বরণের জন্য ওএস-স্তরের সমন্বয় নিষ্ক্রিয় করতে এবং কাঁচা মাউস ইনপুট অ্যাক্সেস করতে { unadjustedMovement: true } সহ requestPointerLock() কে কল করুন। এইভাবে, পয়েন্টার লক থাকা অবস্থায় mousemove ইভেন্ট থেকে মাউস চলাচলের ডেটা মাউসের ত্বরণ অন্তর্ভুক্ত করবে না।

অনুরোধটি সফল হয়েছে কিনা তা জানতে requestPointerLock() থেকে ফিরে আসা নতুন প্রতিশ্রুতি ব্যবহার করুন।

function requestPointerLockWithUnadjustedMovement() {
  const promise = myTargetElement.requestPointerLock({
    unadjustedMovement: true,
  });

  if (!promise) {
    console.log("disabling mouse acceleration is not supported");
    return;
  }

  return promise
    .then(() => console.log("pointer is locked"))
    .catch((error) => {
      if (error.name === "NotSupportedError") {
        // Some platforms may not support unadjusted movement.
        // You can request again a regular pointer lock.
        return myTargetElement.requestPointerLock();
      }
    });
}

পয়েন্টার লক রিলিজ না করেই ত্বরিত এবং নন-এক্সিলারেটেড মাউস মুভমেন্ট ডেটার মধ্যে টগল করা সম্ভব। শুধুমাত্র পছন্দসই বিকল্পের সাথে আবার পয়েন্টার লক অনুরোধ করুন. সেই অনুরোধ ব্যর্থ হলে, আসল লকটি অক্ষত থাকবে এবং প্রত্যাবর্তিত প্রতিশ্রুতি প্রত্যাখ্যান হবে। ব্যর্থ পরিবর্তনের অনুরোধের জন্য কোনো পয়েন্টার লক ইভেন্ট ফায়ার হবে না।

ব্রাউজার সমর্থন

পয়েন্টার লক API ব্রাউজার জুড়ে সমর্থিত । তবে ক্রোমিয়াম-ভিত্তিক ব্রাউজারগুলি (যেমন Chrome, এজ, ইত্যাদি) শুধুমাত্র অক্টোবর 2020 থেকে মাউস ত্বরণের জন্য OS-স্তরের সামঞ্জস্য নিষ্ক্রিয় করা সমর্থন করে। আপডেটের জন্য MDN-এর ব্রাউজার সামঞ্জস্যপূর্ণ সারণী দেখুন।

অপারেটিং সিস্টেম সমর্থন

মাউস ত্বরণের জন্য OS-স্তরের সমন্বয় অক্ষম করা ChromeOS, macOS Catalina 10.15.1, এবং Windows-এ সমর্থিত। লিনাক্স অনুসরণ করবে।

নমুনা

আপনি গ্লিচে নমুনা চালিয়ে পয়েন্টার লক API এর সাথে খেলতে পারেন। সোর্স কোড চেক আউট করতে ভুলবেন না.

সহায়ক লিঙ্ক

স্বীকৃতি

জেমস হোলিয়ার , থমাস স্টেইনার , জো মেডলি , কায়স বাস্কস এবং ভিনসেন্ট শেইবকে তাদের এই নিবন্ধটির পর্যালোচনার জন্য ধন্যবাদ।