Я пытаюсь ускорить некоторые движущиеся изображения стрелок, которые перемещаются по горизонтали по холсту.Я сделал массив, который временно сохраняет классы со стрелками «свойства».В момент, когда появляется последняя стрелка в массиве, я добавляю еще одну.
Когда наш комбо-счет достигает числа x, я хочу, чтобы скорость изменилась.Но когда я это делаю, в массив не добавляются новые стрелки.Я думаю, что причиной этого может быть то, что когда я изменяю скорость, значение x для последней стрелки не совпадает с проверкой, и поэтому новая стрелка не добавляется в массив. (Но я не уверен)
Макет:
var combo = 0;
var counter = 1;
var totalscore = 0;
var arrows = [];
buttonStart.onclick = function() {
combo = 0;
counter = 1;
totalscore = 0;
arrows = [];
for(var i= 0; i<10; i++){
arrows.push(new ARR(counter));
arrows[i].x = i*(-275)-arrows[i].width;
};
intervall = setInterval(moveArrow, 1);
};
//ArrowClass
function ARR(speed){
this.width = 50;
this.x = 0 - this.width;
this.y = 85;
this.speed = speed;
this.code = Math.floor(Math.random()*(40-37+1)+37);
};
function drawArrows(){
ctz.clearRect(0,0, width, height);
for(var i = 0; i<arrows.length; i++){
if(arrows[i].code == 37){
ctz.drawImage(pilHoyre, arrows[i].x, arrows[i].y, arrows[i].width, arrows[i].width );
};
if(arrows[i].code == 38){
ctz.drawImage(pilOpp, arrows[i].x, arrows[i].y, arrows[i].width, arrows[i].width );
};
if(arrows[i].code == 39){
ctz.drawImage(pilVenstre, arrows[i].x, arrows[i].y, arrows[i].width, arrows[i].width );
};
if(arrows[i].code == 40){
ctz.drawImage(pilNed, arrows[i].x, arrows[i].y, arrows[i].width, arrows[i].width );
};
};
}
function moveArrow() {
//Adds a new arrow right before the last one pops up
if( arrows[arrows.length-1].x == -arrows[0].width){
arrows.push(new ARR(counter));
arrows[arrows.length-1].x = arrows[arrows.length-2].x - 275;
};
if(arrows[0].x >= width){
if(hit == false){
totalscore += miss;
};
arrows.splice(0,1);
};
//gives arrows a new position
for(var i = 0; i < arrows.length; i++){
arrows[i].x += arrows[i].speed;
};
drawArrows();
};
//points
var miss = -3;
var perfect = 10;
var great = 5;
var good = 1;
//OnKeyDown delay
var movelistener = null;
function delaytimer(){
movelistener += 1;
return movelistener;
};
document.onkeydown = function(event){
totalScore.innerHTML = "";
//Onkeydown Delay
if( movelistener === null ){
movelistener = setInterval(delaytimer, 1);
} else if ( movelistener <= 200 ){
text(totalscore, combo);
return;
} else {
movelistener = null;
};
//User click wrong button
if( event.keyCode !== arrows[0].code ){
totalscore += miss;
} else if ( event.keyCode == arrows[0].code ){
//Hits perfect (+/- some pixels)
if( arrows[0].x >= 630 && arrows[0].x <= 660 ){
totalscore += perfect;
combo += 1;
if(combo != 0 && combo%10 == 0){
counter += 1;
for(var i = 0; i < arrows.length; i++){
arrows[i].speed = counter;
};
}
} else if ( (arrows[0].x >= 600 && arrows[0].x < 630) || (arrows[0].x >= 630 && arrows[0].x <= 710) ){
totalscore += great;
combo = 0;
} else if ( (arrows[0].x > 710 || arrows[0].x < 600) && (arrows[0].x >= 586-arrows[0].width) ){
totalscore += good;
combo = 0;
} else {
totalscore += miss;
};
};
};