我遇到了一个问题,当一个人玩游戏时没有问题。但是,当他们按下重新启动键时,似乎以前的分数仍然存在,并导致将其发送到后端两次,有时还会将当前分数和先前的分数怪异地加到一个分数中。希望有人能告诉我为什么会这样。
现在为了在画布上开始游戏,我将其设置为
preGame();
document.addEventListener("keypress", e => {
if (
e.key === "r" &&
document.getElementById("inputName").type === "hidden"
) {
let score = 0;
const canvasStart = document.getElementById("start");
if (canvasStart.getContext) {
const ctxStart = canvasStart.getContext("2d");
ctxStart.clearRect(0, 0, canvasStart.width, canvasStart.height);
}
const canvas = document.getElementById("canvas");
const canvasEnemy = document.getElementById("enemy");
const canvasScore = document.getElementById("scoreBoard");
const canvasGameOver = document.getElementById("gameOver");
if (canvas.getContext) {
const ctx = canvas.getContext("2d");
const ctxEnemy = canvasEnemy.getContext("2d");
const ctxScore = canvasScore.getContext("2d");
const ctxGameOver = canvasGameOver.getContext("2d");
new Game(
ctx,
canvas,
ctxEnemy,
canvasEnemy,
ctxScore,
canvasScore,
ctxGameOver,
canvasGameOver,
score
).start();
}
}
});
基本上,它应该在有人按下r键后立即开始。我遇到问题的区域是
showInput() {
document.getElementById("inputName").type = "text";
document.getElementById("inputName").addEventListener("keyup", e => {
e.preventDefault();
if (e.keyCode === 13) {
const scores = firebase.database().ref("scores/");
let name = document.getElementById("inputName").value;
let score = this.score;
let highScore = { name, score };
scores.push(highScore);
this.score = 0;
document.getElementById("inputName").type = "hidden";
this.showLeaderBoard();
}
});
}
我在此功能中将分数设置为0的原因是要找出以前的分数持续存在的位置。现在它显示0,并且正在创建新分数。我将附上一张图片以显示我的意思。
Where console log is being done
任何建议将不胜感激。我很好奇,想知道为什么会发生这种情况,当我想通过按r键,它应该开始全新的游戏时。