gpt4 book ai didi

javascript - 按 ENTER 后如何重新启动游戏?

转载 作者:行者123 更新时间:2023-11-28 07:46:01 24 4
gpt4 key购买 nike

我制作了一个简单的游戏,快完成了,我唯一剩下的就是在按Enter时让游戏重新启动。现在,当我按 Enter 时,游戏就会开始,但不会重新启动。

有人可以帮我吗?

这是启动游戏的代码

document.onkeydown = function tast (e) {
if (e.keyCode == 39) { // høyre
høyre = 1;
}
if (e.keyCode == 37) { // venstre
venstre = 1;
}
if (e.keyCode == 38) { // opp
opp = 1;
}
if (e.keyCode == 40) { // ned
ned = 1;
}
if(e.keyCode == 32) {
newskudd();
snd.play();
console.log("hit space")
}
if(e.keyCode == 13){
spill();
}

}

要观看演示,请单击链接 DEMO

溢出();功能是

function spill() {

ctx.clearRect(0, 0, canvas.width, canvas.height);

for (var i = 0; i < kuler.length; i++) {
kuler[i].x += 0;
kuler[i].y += kuler[i].dy;


ctx.fillStyle = kuler[i].f;
ctx.beginPath();
ctx.arc(kuler[i].x, kuler[i].y, kuler[i].r, 2*Math.PI, 0);
ctx.closePath();
ctx.fill();

if (venstre == 1){
kuler[0].x -= 4;
}
if (høyre == 1){
kuler[0].x += 4;;
}
if (opp == 1){
kuler[0].y -= 4;
}
if (ned == 1){
kuler[0].y += 4;
}


if (kuler[0].x >= canvas.width-kuler[0].r) {
kuler[0].x = canvas.width-kuler[0].r
};
if (kuler[0].x <= 0+kuler[0].r) {
kuler[0].x = 0+kuler[0].r
};
if (kuler[0].y >= canvas.height-kuler[0].r) {
kuler[0].y = canvas.height-kuler[0].r
};
if (kuler[0].y <= 0+kuler[0].r) {
kuler[0].y = 0+kuler[0].r
};



for (var j = 0; j < fiender.length; j++) {
ctx.fillStyle = "blue";
ctx.beginPath();
ctx.arc(fiender[j].x, fiender[j].y, fiender[j].r, 2*Math.PI, 0);
ctx.closePath();
ctx.fill();

fiender[j].y += fiender[j].vy;

if (fiender[j].x >= canvas.width -fiender[j].r) {
fiender[j].x =canvas.width - fiender[j].r;
};
if (fiender[j].x <= 0 + fiender[j].r) {
fiender[j].x =0 + fiender[j].r;
};

if (fiender[j].vy >= 2) {
fiender[j].vy = 2;
};


/*if (fiender[j].y + fiender[j].r >= kuler[i].y && fiender[j].x + fiender[j]. == kuler[i].x) { // remove kuler[i] and fiender[j] }
fiender.splice(j, 1);
kuler.splice(i,1);
};*/

var distanceFromCenters = Math.sqrt(Math.pow(Math.abs(fiender[j].x - kuler[i].x),2) + Math.pow(Math.abs(fiender[j].y - kuler[i].y),2 )); // you have a collision
if (distanceFromCenters <= (fiender[j].r + kuler[i].r)) {
fiender.splice(j, 1);
kuler.splice(i,1);
poeng += 1;
} else if (fiender[j].y > canvas.height) {
fiender.splice(j,1)
}

if(j > 1){
fiender.splice(j,1)

}

tekst.innerHTML = ( "Poeng: " + poeng )
}
}
requestAnimationFrame(spill);
}

最佳答案

我认为每次按下 spill() 时,都会开始一个新的 requestAnimationFrame 循环。因此,每次按下 spill() 时,您实际上都会双重调用 y 坐标 转换:fiender[j].y += fiender[j] .vy;

Read here on how to properly start/stop a window.requestAnimationFrame

var requestId;

function loop() {
...
// do stuff
...
requestId = window.requestAnimationFrame(loop, canvas);
}

function start() {
if (!requestId) {
loop();
}
}

function stop() {
if (requestId) {
window.cancelAnimationFrame(requestId);
requestId = undefined;
}
}

关于javascript - 按 ENTER 后如何重新启动游戏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27425990/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com