я пытаюсь получить значение переменной, которое мне нужно увеличивать на 5 каждый раз, когда нажимается клавиша вверх.
В настоящее время у меня есть переменная, увеличивающаяся при нажатии клавиш и т. Д., Но главная проблема, с которой я сталкиваюсь, состоит в том, что при нажатии одной клавиши значение будет продолжать расти.Например, значение будет начинаться с 5, после одно нажатие клавиши будет продолжать увеличиваться на 5 каждый раз и останавливаться сразу после 600. В то время как я хочу, чтобы начиналось с 5, а затем при каждом нажатии клавиши переходить к10,15,20 ....
Вот код, который у меня есть, я был бы признателен за помощь в том, где я ошибаюсь, и т. Д.
var projectoryHeight = 5;
function setHeight()
{
projectoryHeight = projectoryHeight + 5;
};
if (keyCode == 38)
{
setHeight();
console.log(projectoryHeight);
};
Код, которыйотносится к коду ключа для размещаемого ключа вверх, находится внутри функции рендеринга, для использования с requestAnimationFrame ().Я чувствую, что это может быть причиной того, что проблема продолжает отсчитываться, однако я пытался переместить ее за пределы этой функции, и ничего не происходит.
Javascript используется вместе с THREE.js & Physi.js
Дополнительный код для решения проблемы:
var render = function() {
requestAnimationFrame(render);
scene.simulate();
let keyFlag = false;
// Update the title page shape rotations
sphere.rotation.y += 0.06;
sphere.rotation.x += 0.10;
sphere.rotation.z += 0.06;
document.addEventListener("keydown", (e) => {
if(e.code == 'KeyW'){
$(title).hide();
$(keyTitle).hide();
scene.remove(sphere);
sphere.geometry.dispose();
sphere.material.dispose();
//add all the game functions here
scene.add(cube);
scene.add(firingBall);
scene.add(struct1);
scene.add(struct2);
scene.add(struct3);
scene.add(struct4);
scene.add(struct5);
scene.add(struct6);
scene.simulate();
}
});
document.addEventListener("keydown", (e) => {
if(e.code == 'Space'){
firingBall.setLinearVelocity(new THREE.Vector3(speedOfBall, projectoryHeight, 0));
}
});
document.addEventListener("keydown", (e) => {
if(e.code == 'ArrowUp'){
if (!keyFlag) {
keyFlag = true;
projectoryHeight = projectoryHeight + 5;
console.log(projectoryHeight);
}
}
});
document.addEventListener("keydown", (e) => {
if(e.code == 'ArrowDown'){
if (!keyFlag) {
keyFlag = true;
projectoryHeight = projectoryHeight - 5;
console.log(projectoryHeight);
}
}
});
document.addEventListener("keyup", (e) => {
if(e.code == 'ArrowUp'){
if (keyFlag){
console.log("stopped");
keyFlag = false;
}
}
});
document.addEventListener("keyup", (e) => {
if(e.code == 'ArrowDown'){
if (keyFlag){
console.log("stopped");
keyFlag = false;
}
}
});
renderer.autoClear = false;
renderer.clear();
renderer.render(backgroundScene, backgroundCamera);
renderer.render(scene, camera);
};
Эта функция используется для нажатия клавиш и т. Д. Внутри функции рендеринга.Также запускает анимационные кадры и игровую физику.
Эта функция вызывается непосредственно после объявления
Спасибо