Чем дольше я жду, чтобы стрелять, тем дальше стрелка появляется на экране (javascript) - PullRequest
0 голосов
/ 30 мая 2018

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

// Player Vars
	var arrows = new Array();
	var angles = new Array();
	var xBow = 0, yBow = 0;
	var loaded = false;
	var timeload = 0;
	var BowC, BowR;
	var xBowW, yBowH;
	var shoot = false;
	var angleBow;
	var vel;
	var acel = 0.1;

function drawThatBow(){
	angleBow = Math.atan2(yRato-yBow-bow.height/2, xRato-xBow);
	
	ctx.save();
	ctx.translate( xBow, yBow + bow.height/2 );
	ctx.rotate( angleBow );
	ctx.translate( 0, -bow.height/2 );
	ctx.drawImage(bow, BowC * xBowW, BowR, xBowW, yBowH, 0, 0, xBowW, yBowH);
	ctx.restore();
}

function Play() {
	if (mouseIsDown) {
		shoot = true;
	} else if (mouseIsUp && shoot) {
		SpawnArrow();
		shoot = false;
	}
	
	DrawArrows();
}

function SpawnArrow(){
	arrows.push( {x: xBow, y: yBow, imagem: arrow, angle: angleBow, timer: 0} );
}

function DrawArrows() {
	vel = 10;
	for (var i = 0; i < arrows.length; i++) {
		arrows[i].timer++;
		
		ctx.save();
		ctx.translate( x, y );
		ctx.rotate( arrows[i].angle );
		ctx.translate( 0, -arrows[i].height/2 );
		ctx.drawImage(arrows[i].imagem, 0, 0);
		ctx.restore();
		
		var x = arrows[i].x + vel * Math.cos(-(arrows[i].angle)) * arrows[i].timer;
		var y = arrows[i].y + bow.height/2 - vel * Math.sin(-(arrows[i].angle)) * arrows[i].timer + acel / 2 * arrows[i].timer * arrows[i].timer;
		
		if (arrows[i].x > larg || arrows[i].y > alt) {
			arrows.splice(arrows[i], 1);
		}
	}
}

1 Ответ

0 голосов
/ 30 мая 2018

Хорошо, неважно, я понял.я должен был объявить переменные x и y вне функции, после этого она работала нормально, я также немного ее переместил:

for (var i = 0; i < arrows.length; i++) {
    arrows[i].timer++;

    x = arrows[i].x + vel * Math.cos(-(arrows[i].angle)) * arrows[i].timer;
    y = arrows[i].y + bow.height/2 - vel * Math.sin(-(arrows[i].angle)) * arrows[i].timer + acel / 2 * arrows[i].timer * arrows[i].timer;

    ctx.save();
    ctx.translate( x, y );
    ctx.rotate( arrows[i].angle );
    ctx.translate( 0, -arrows[i].height/2 );
    ctx.drawImage(arrows[i].imagem, 0, 0);
    ctx.restore();

    if (arrows[i].x > larg || arrows[i].y > alt) {
        arrows.splice(arrows[i], 1);
    }
}
...