GOOGLE ADS

среда, 4 мая 2022 г.

как установить прослушиватель событий и предотвратить рассылку ключевого спама

Я играю с созданием 2D-истребителя. используя только javascript, css и html, я застрял в том, как предотвратить спам кнопки атаки, как сумасшедший. Если я нажимаю клавишу атаки 5 раз в секунду, она также регистрируется и выполняет анимацию. Я хочу ограничить ключевой регистр 1 раз в 750 миллисекунд.

Как мне это сделать? Я думаю, что это как-то связано с отметкой времени, но я не могу понять логику

Вот что у меня есть без ограничения:

window.addEventListener('keydown', (event) =>{
switch (event.key) {
case ' ':
if (player_1.position.x < (player_2.position.x + 25))
{player_1.attack_player_1()
// setTimeout(() => {sword_swing.play()},200)}
setTimeout(() => {sfx_player_1.sword_swing.play()},200)}
else {player_1.attack_player_1_reversed()
setTimeout(() => {sfx_player_1.sword_swing.play()},200)
}
break
}
});

Решение проблемы

Я предполагаю, что вам может понадобиться временной интервал для нескольких функций, и для этого вам нужно отслеживать временной интервал каждой функции с отдельной переменной, вместо этого я создал класс, чтобы использовать его в качестве помощника замедления. это пример, который вы можете отредактировать в своем коде.


class slowDown {
constructor(cb,timeGap){
this.last = 0
this.run = function(){
let current = Date.now(),
shouldRun = (current - this.last) >= timeGap
if(shouldRun){
cb(current - this.last)
this.last = current
}
}
}
}
// example use
const press = new slowDown(timeElapsed => {
// define function here which you wanted to slow down
console.log("pressed after " + timeElapsed + " ms")
},750)
window.addEventListener("keydown",()=>{
press.run()
})

Комментариев нет:

Отправить комментарий

Laravel Datatable addColumn returns ID of one record only

Я пытаюсь использовать Yajra Datatable для интеграции DataTable на свой веб-сайт. Я смог отобразить таблицу, но столкнулся с проблемой. В по...