Как мне вызывать setTimeout в requestAnimationFrame
Пишу rpg игру, и надо сделать так, чтобы монстр бил игрока раз в секунду, но при вызове setTimeout, он выполняется 60 раз в секунду, как можно решить эту проблему подскажиту пожалуйста
import Camera from "../gameObjects/camera";
import Map from "../gameObjects/map";
import Player from "../gameObjects/player";
import Mob from "../gameObjects/mob";
import {keyDownListener, keyUpListener, movesControler} from "./methods/controler";
export default class Game {
constructor() {
this.keydown = {};
this.cnv = document.querySelector("canvas");
this.ctx = this.cnv.getContext("2d");
this.w = this.cnv.width = innerWidth; // viewport width
this.h = this.cnv.height = innerHeight; // viewport height
this.velocityPlayerCamera = 1.4;
this.player = new Player(this.ctx);
this.camera = new Camera();
this.map = new Map(this.ctx);
this.fightStatus = false;
this.keyDownListener = keyDownListener.bind(this);
this.keyUpListener = keyUpListener.bind(this);
this.movesControler = movesControler.bind(this);
this.mapWidth = this.map.getSize().w;
this.mapHeight = this.map.getSize().h;
this.init();
}
init() {
this.keyDownListener();
this.keyUpListener();
this.mob = new Mob(this.ctx);
this.loop();
}
fight(){
this.mob.beat(this.player);
}
draw() {
this.ctx.clearRect(0, 0, this.w, this.h);
for(let key in this.keydown){
this.movesControler(key);
}
//draw map
this.ctx.fillStyle = "#cdc";
this.ctx.fillRect(0, 0, this.w, this.h);
this.map.draw(this.camera);
//calculates
this.fightStatus = this.mob.agression(this.player);
setTimeout(()=>this.fight(),1000);
//draw player
this.player.draw(this.camera);
//draw mobs
this.mob.draw(this.camera);
}
loop() {
this.draw();
requestAnimationFrame(() => this.loop());
}
}
Ответы (1 шт):
Автор решения: Igor
→ Ссылка
constructor() {
this.keydown = {};
this.timer = null;
...
...
if (!this.timer)
this.timer = setTimeout(() => { this.timer = null; this.fight(); }, 1000);