在我的游戏中使用 setInterval 的敏感性不起作用 (js)

Sensibility in my game using setInterval is not working (js)

所以我正在创建一个游戏,如果有人点击参数图标,它会打开一个带有游侠幻灯片的面板(值:1 = 低敏感度,2 = 中等敏感度,3 = 高敏感度)。这个游侠幻灯片决定了我的飞船移动的速度(灵敏度)。但是我在改变敏感性时遇到了一个问题。我的代码有一些奇怪的行为(有时有效有时无效)知道为什么吗? 这是代码:

游侠幻灯片:

<input type="range" id="sensibilty" min="1" max="3" value="2">

js代码

const loop = function() {
if (keys[37] || keys[65]) {pos.left -= 10} //THIS IS HOW SPACESHIP MOVES WITH KEYBOARD KEYS
if (keys[39] || keys[68]) {pos.left += 10}
if (keys[38] || keys[80]) {pos.top -= 1}
if (keys[40] || keys[75]) {pos.top += 1}}
let sens = setInterval(loop, 1000 / 40) //INITIAL SENSIBILITY

function validateSens() {
let sensibilty = document.getElementById("sensibilty").value
if (sensibilty == 1 || sensibilty == "1") {clearInterval(sens); setInterval(loop, 1000 / 30)} 
//DIFFERENT SENSIBILITY BASED ON RANGER SLIDE VALUE
if (sensibilty == 2 || sensibilty == "2") {clearInterval(sens); setInterval(loop, 1000 / 40)}
//DIFFERENT SENSIBILITY BASED ON RANGER SLIDE VALUE
if (sensibilty == 3 || sensibilty == "3") {clearInterval(sens); setInterval(loop, 1000 / 60)}
//DIFFERENT SENSIBILITY BASED ON RANGER SLIDE VALUE
else {alert("Sorry, a bug occured")}} //That gives me an alert if bug occurres

此外,这个警报有时会打开,有时不会...很奇怪

您没有重新分配 setInterval() 结果。

检查下面的代码(我也简化了一点)。

function validateSens() {
    clearInterval(sens);
    let sensibilty = parseFloat(document.getElementById("sensibilty").value);

    switch(sensibilty) {
        case 1:
            sens = setInterval(loop, 1000 / 30);
            break;
            
        case 2:
            sens = setInterval(loop, 1000 / 40);
            break;
            
        case 3:
            sens = setInterval(loop, 1000 / 60);
            break;
            
        default:
            alert("Sorry, a bug occured");
            break;
    }
}