Я пытаюсь сделать аркадный шутер с прокруткой вверх.Я застрял на том, как отвести пули вверх от игрока туда, где будут враги.Я использую setInterval, чтобы повторить стрельбу в месте нахождения игрока, но пули следуют только за истребителем, сбрасывая интервал каждый раз, когда игрок перемещается на указанное количество.
Любая помощь?
Вот мой код на данный момент.
Заранее спасибо.
var project, ctx, img, img2, width, height, mid, midh, startPx, startPy, audio,interval,bulletStartPx,bulletStartPy;
var score = 0;
function setUp() {
project = document.getElementById("project");
ctx = project.getContext("2d");
width = 505;
height = 900;
mid = width/2;
midh = height/2;
startPx = width/2-30;
startPy = height-150;
audio = new Audio("bgm.mp3");
audio.play();
img = new Image();
img2 = new Image();
img.src = "bg.png";
img2.src = "fighterjet.png"
img.onload = function(){
ctx.shadowColor = "#ffffff";
ctx.shadowBlur = 15;
ctx.drawImage(img, 0, 0);
ctx.drawImage(img2, startPx, startPy)
}
window.addEventListener("keydown", checkKeyPress);
}
function drawObject(x, y) {
ctx.drawImage(img2, startPx, startPy)
}
function checkKeyPress(event) {
if (event.keyCode == "87") {//W(UP)
ctx.clearRect(0,0,width,height);
if (startPy >= 20) {
startPy -= 20;
}
ctx.drawImage(img, 0, 0);
ctx.drawImage(img2, startPx, startPy)
} else if (event.keyCode == "83") {//S(DOWN)
ctx.clearRect(0,0,width,height);
if (startPy <= 785) {
startPy += 20;
}
ctx.drawImage(img, 0, 0);
ctx.drawImage(img2, startPx, startPy)
} else if (event.keyCode == "65") {//A(LEFT)
ctx.clearRect(0,0,width,height);
if (startPx >= 0) {
startPx -= 20;
}
ctx.drawImage(img, 0, 0);
ctx.drawImage(img2, startPx, startPy)
} else if (event.keyCode == "68") {//D(RIGHT)
ctx.clearRect(0,0,width,height);
if (startPx <= 410) {
startPx += 20;
}
ctx.drawImage(img, 0, 0);
ctx.drawImage(img2, startPx, startPy)
} else if (event.keyCode == "72") {
for (let i = 0; i < 6; i++) {
bullets();
}
}
}
function bullets() {
return setInterval(function(){
bulletStartPx = startPx+48;
bulletStartPy = startPy-30;
ctx.fillStyle = "gold"
ctx.beginPath();
ctx.arc(bulletStartPx,bulletStartPy,5,0,2*Math.PI);
ctx.fill();
score += 25; }, 100);
}
function GameOver(){
document.getElementById('bm').pause();
ctx.font = '30px Courier New'
ctx.filltext('GAME OVER', mid, midh)
ctx.filltext('Your score was: '+score, mid, midh+40)
}
function showScore(){
ctx.fillStyle = '#ff0000'
ctx.font = '18px Courier New'
ctx.text(score, width-10, 15)
}
/*
function bullet(){
this.x = startPx;
this.y = startPy - 10;
this.draw = function() {
ctx.fillStyle = "#b20808";
ctx.shadowColor = "#b20808";
ctx.shadowBlur = 15;
this.y -= bulletSpeed;
ctx.fillRect(this.x, this.y, 2, 8);
}
}
function fireGun(){
if (event.keyCode == "32") {
bullet();
}
}*/
<!DOCTYPE html>
<html>
<head>
<title>Project</title>
<meta charset="utf-8">
<script src="project.js" type="text/javascript" defer></script>
</head>
<body>
<h1>Arcade Shooter</h1>
<fieldset>
<legend><h2>Instructions:</h2></legend>
<h3>Press W, A, S, D to Move</h3>
<h3>Press Space Bar to Fire</h3>
<h3>Goal: Survive as long as you can!</h3>
</fieldset>
<br>
<canvas id="project" style="border-style: solid" width=505 height=900 ></canvas>
<br>
<input id="start" type="button" value="START THE GAME" onclick="setUp()" style="width: 300px">
</body>
</html>