משביתים את שיפור המהירות באמצעות עכבר כדי לספק חוויית גיימינג טובה יותר ב-FPS

עכשיו אפליקציות אינטרנט יכולות להשבית את האצת העכבר בזמן תיעוד אירועים של זיהוי מיקום הסמן של משתמשים אחרים.

François Beaufort
François Beaufort

תנועה מואצת היא תכונה ארגונומית כשמשתמשים בעכבר או במשטח מגע כדי להזיז את הסמן על המסך. היא מאפשרת תנועה מדויקת על ידי הזזה לאט, תוך כדי לאפשר למצביע לעבור את כל המסך בתנועה קצרה מהירה. באופן ספציפי, באותו מרחק פיזי שבו מזיזים את העכבר, הסמן במסך נע רחוק יותר אם המרחק עבר מהר יותר.

מערכות הפעלה מאפשרות האצה של עכבר כברירת מחדל. בחלק ממשחקי פרספקטיבה מאינטראקציה ישירה, בדרך כלל משחקי יריות בגוף ראשון (FPS), הנתונים הגולמיים של הקלט מהעכבר משמשים לשליטה בסיבוב המצלמה ללא התאמת האצה. אותה תנועה פיזית, איטית או מהירה, גורמת לאותה סיבוב. כך מתקבלת חוויית גיימינג טובה יותר ודיוק גבוה יותר, לדברי גיימרים מקצועיים.

צילום מסך של בקרת התנועה של הסמן בהגדרות של Windows 10.
בקרת תנועת הסמן בהגדרות של Windows 10.

החל מגרסה 88 של Chrome, אפליקציות אינטרנט יכולות לעבור בין נתונים מואצת של תנועת עכבר לבין נתונים לא מואצת של תנועת עכבר בעזרת ה-API המעודכן לנעילת Pointer.

פלטפורמות משחקים מבוססות-אינטרנט כמו Google Stadia ו-Nvidia GeForce Now כבר משתמשות ביכולות החדשות האלה כדי לרצות גיימרים של משחקי FPS.

תמיכה בדפדפנים

  • Chrome: 37.
  • Edge:‏ 13.
  • Firefox: 50.
  • Safari: 10.1.

מקור

שימוש ב-API

בקשה לנעילה של מצביע העכבר

נעילה של הסמן היא המונח הקנוני למצב שבו אפליקציה למחשב מסתירה את סמל הסמן ומפרשת את תנועת העכבר כפעולה אחרת, למשל התבוננות בעולם תלת-ממדי.

המאפיינים movementX ו-movementY מאירועי המסמך mousemove מצביעים על המרחק שבו נע סמן העכבר מאז אירוע ההזזה האחרון. עם זאת, הם לא מתעדכנים כשהסמן עובר אל מחוץ לדף האינטרנט.

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");
});

השבתת האצת העכבר

קוראים לפונקציה requestPointerLock() באמצעות { unadjustedMovement: true } כדי להשבית את ההתאמה ברמת מערכת ההפעלה לשיפור האצת העכבר, ולגשת לקלט עכבר גולמי. כך, נתוני תנועת העכבר מאירועים של 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();
      }
    });
}

אפשר לעבור בין הנתונים של תנועת העכבר המואצת לבין הנתונים של תנועת העכבר לא מואצת, בלי לשחרר את הנעילה של הסמן. פשוט מבקשים שוב את נעילת הסמן עם האפשרות הרצויה. אם הבקשה נכשלת, המנעול המקורי יישאר שלם וההבטחה שתוחזר תידחה. לא יופעלו אירועי נעילה של מצביע העכבר עבור בקשת שינוי שנכשלה.

תמיכה בדפדפנים

Pointer Lock API נתמך היטב בכל הדפדפנים. עם זאת, דפדפנים המבוססים על Chromium (למשל, Chrome,‏ Edge וכו') הם היחידים שתומכים בהשבתה של ההתאמה ברמת מערכת ההפעלה להאצת העכבר החל מאוקטובר 2020. לקבלת עדכונים, אפשר לעיין בטבלה של תאימות הדפדפן ב-MDN.

תמיכה במערכת ההפעלה

אפשר להשבית את ההתאמה ברמת מערכת ההפעלה לשיפור המהירות של העכבר ב-ChromeOS, ב-macOS Catalina 10.15.1 וב-Windows. Linux ייכלל בהמשך.

דוגמה

כדי לשחק עם Pointer Lock API, אפשר להריץ את הדוגמה ב-Glitch. חשוב לבדוק את קוד המקור.

קישורים שימושיים

אישורים

תודה לג'יימס הולייר, תומס סטיינר, ג'ו מדלי, קייס בסקי ולוינסנט שייב על הביקורות שפרסמו על המאמר הזה.