我想实现一个功能,当用户按住Shift键时,播放器会加快速度。当用户释放Shift键时,播放器将恢复正常速度。现在,我的代码将在按住Shift键的同时递归提高速度,但我不知道为什么。请帮助我修复它。



button.addEventListener ("click", function() {
  my_game = setInterval(game, speed);
});

window.onload = function() {
	canv = document.getElementById("gc");
	context = canv.getContext("2d");
	document.addEventListener ("keydown", keyPush);
	document.addEventListener ("keyup", keyRelease);
}

function keyPush(keyEvent) {
	switch(keyEvent.keyCode) {
		case 16:
			clearInterval(my_game);
			speed *= 0.1;
			my_game = setInterval(game, speed);
			break;
	}
}

function keyRelease(keyEvent) {
	switch(keyEvent.keyCode) {
		case 16:
			clearInterval(my_game);
			speed /= 0.1;
			my_game = setInterval(game, speed);
			break;
	}
}

最佳答案

您应该为正常速度使用一个常数,并在用户按下键时仅一次而不是每次按下键时减小/减小该常数:speed *= 0.1;



var NORMAL_SPEED = 1;

button.addEventListener ("click", function() {
  my_game = setInterval(game, speed);
});

window.onload = function() {
	canv = document.getElementById("gc");
	context = canv.getContext("2d");
	document.addEventListener ("keydown", keyPush);
	document.addEventListener ("keyup", keyRelease);
}

function keyPush(keyEvent) {
	switch(keyEvent.keyCode) {
		case 16:
			clearInterval(my_game);
			speed = NORMAL_SPEED * 0.1;
			my_game = setInterval(game, speed);
			break;
	}
}

function keyRelease(keyEvent) {
	switch(keyEvent.keyCode) {
		case 16:
			clearInterval(my_game);
			speed = NORMAL_SPEED;
			my_game = setInterval(game, speed);
			break;
	}
}

07-24 17:47
查看更多