Я работаю над игрой Runner HTML5, объект работает непрерывно, а на мыши - «щелчок», он прыгает. Затем я добавляю препятствие в игру и обнаруживаю столкновение, но оно работает неправильно. Проблема заключается в том, что когда препятствие сталкивается один раз с запущенным объектом и обнаруживает столкновение, очищайте все объекты, а затем перерисовывайте препятствия на холсте, но по мере того, как препятствие сталкивается снова и снова с быстротой и быстротой объекта hurdle .... :( Вопрос в том, как преодолеть Вот код:.Проблема с обнаружением столкновений с холстом для HTML5
function clearHurdle(){
h.clearRect(100,hy,160,250);
//if(hx==paiX||hy==paiY){
bl= new Image();
bl.onload= function(){
h.drawImage(bl,100,hy-20,160,250);
};
bl.src= "blast.png";
setTimeout(function(){
h.clearRect(100,hy-20,160,250);
show_char=0;
clearAll();
//drawpai();
hurdle();
},100);
}
function hurdle(){
if(hx>(paiX-2) && hx<(paiX+2) && hy>(paiY-2) && hy<(paiY+2)){
console.log(hx +'===='+(paiX-2));
clearHurdle();
hx=1360;
}
h.clearRect(hx,hy,170,250);
var img = new Image();
img.onload= function(){
h.drawImage(img,hx,hy,170,250);
}
img.src="hurdle.png";
hx-= 4.5;
if(hx>-400){
setTimeout(hurdle,1000/60);
}
show_char=1;
}
Я считаю, что это из-за setInterval в вашей функции clearHurdle. Он работает отлично в первый раз, но поскольку setTimeout вызывает функцию 'hurdle' (которая затем вызывает' clearHurdle' обратно в бесконечно непрерывный цикл), добавляя, таким образом, второй setInterval. Чтобы исправить это, вам нужно объявить имя переменной для setInterval и использовать 'clearInterval (varName)' для каждого сброса –
, благодаря @Zeaklous, это работает. :) Спасибо за помощь Бадди. –