A-Frame 外观控制在旧设备上非常不稳定

A-Frame look-controls very unstable on older devices

我正在使用 A-Frame 1.0.4 构建一个 360 度全景查看器,但我在使用旧设备时遇到了一些我不知道如何解决的问题。我正在 Android 应用程序内的 WebView 中进行测试。

在最新的设备上,陀螺仪和加速度计工作得很好,但在旧设备(例如 ASUS X008D)上,一切都不稳定,当我把 phone 放在table 或者当我拿着它的时候。我认为这可能是由于 polyfills 但我不知道如何。我添加了一些日志来检查 DeviceMotionEvent 和 DeviceOrientationEvent,两者都被识别了,但似乎还不够。

我如何确保事件得到正确处理并最终在外观控件中手动禁用 hmd,当它不够 stable 时?仍然会有拖累,我会接受的。

感谢您的帮助:)

经过进一步调查,我发现问题出在哪里。这是因为传感器 API 在某些设备上不可用并且陀螺仪未正确读取。如果我理解正确的话,在 DeviceMotion 上有一个回退,但它在旧设备上可能不太好,我不知道...

我对 "fix" 所做的就是编写这个小片段来检查陀螺仪 class 是否可用。如果不是,我禁用了外观控制组件的所有移动,只允许手动移动。我希望它可以帮助任何遇到这个问题的人。它有点快'n'dirty,但它完成了工作所以我没问题。

var gyroscope = null;
try {
    gyroscope = new Gyroscope();
    gyroscope.addEventListener('error', event => {
        document.getElementById("camera").setAttribute("look-controls", "magicWindowTrackingEnabled: false");
    });
    gyroscope.start();
    // Stop the gyroscope after trying so it does not run in background.
    setTimeout(function() { gyroscope.stop(); }, 500);
} catch (error) {
    document.getElementById("camera").setAttribute("look-controls", "magicWindowTrackingEnabled: false");
}

在 A-Frame github 页面上也有 an open issue 相关内容。