javascript如何更改键盘上的变量单击

javascript如何更改键盘上的变量单击,javascript,jquery,html5-canvas,Javascript,Jquery,Html5 Canvas,我一直在尝试用javascript制作我的第一个游戏,这是一个类似乒乓球的游戏,两个玩家移动他们的矩形,将球撞向另一个方向。我希望这样,当玩家一按“a”键时,他们的角色向左移动,当他们按d键时,他们向右移动 现在,当我单击所需的键时,不会发生任何事情 这是我当前的代码: $(文档).ready(函数(){ //需要的东西 var canvas=document.getElementById(“myCanvas”); var ctx=canvas.getContext(“2d”); //开始时元

我一直在尝试用javascript制作我的第一个游戏,这是一个类似乒乓球的游戏,两个玩家移动他们的矩形,将球撞向另一个方向。我希望这样,当玩家一按“a”键时,他们的角色向左移动,当他们按d键时,他们向右移动

现在,当我单击所需的键时,不会发生任何事情

这是我当前的代码:

$(文档).ready(函数(){
//需要的东西
var canvas=document.getElementById(“myCanvas”);
var ctx=canvas.getContext(“2d”);
//开始时元素的位置
var ballposx=400;
var-ballposy=50;
var balldx=1;
var-balldy=2;
var balld2x=0;
var balld2y=0;
var p1posx=80;
变量p1posy=225;
变量p1dx=0;
var p1dy=0;
var p2posx=620;
var p2posy=225;
var p2dx=0;
var p2dy=0;
函数绘图(){
clearRect(0,0,canvas.width,canvas.height);
//进球1
ctx.fillStyle=“#0F3F0F”;
var goal1=ctx.fillRect(0,150,50,150);
//目标2
ctx.fillStyle=“#204050”;
var goal2=ctx.fillRect(750,150,50,150);
ctx.beginPath();
//球
var ball=ctx.arc(ballposx,ballposy,60,0,2*Math.PI);
ctx.stroke();
//p1
ctx.fillStyle=“#FF0000”;
变量p1=ctx.fillRect(p1posx,p1posy,40,75);
//p2
ctx.fillStyle=“#0000FF”;
var p1=ctx.fillRect(p2posx,p2posy,40,75);
p1posx+=p1dx;
p2posx+=p2dx;
balldx+=balld2x;
balldy+=balld2y;
ballposx+=balldx;
ballposy+=balldy;
$(窗口)。按键(功能(e){
var代码=e.which;
开关(代码){
案例65:
p1dx=1;
案例68:
p1dx=-1;
案例37:
p2dx=-1;
案例39:
p2dx=1;
违约:
打破
}
});
if(ballposy==240){
balldy=-1;
}否则如果(ballposy==60){
balldy=1;
}否则如果(ballposx==60){
balldx=1;
}else if(ballposx==740){
balldx=-1;
}else if(ballposx==p1posx&&ballposy


抱歉,您的浏览器不支持此功能我没有检查整个代码,但是您应该添加
中断语句,而不仅仅是默认值

例如,您的代码应该类似于:

$(window).keypress(function(e){
  var code = e.which;
  switch (code)
  {
    case 65:
      p1dx = 1;
      break;
    case 68:
      p1dx = -1;
      break;
    case 37:
      p2dx = -1;
      break;
    case 39:
      p2dx = 1;
      break;
    default:
      break;
  }
});

您每10毫秒添加一个
keypress
处理程序。因此,几秒钟后,每次按一个键都会有数千个处理程序运行,这可能会使浏览器陷入困境。只需在
draw
函数之外绑定一次处理程序

在函数中,您需要在每个
案例中使用
break
语句

您的
code
测试也是错误的。小写的
a
97
,而不是
65
。而且
p1dx
的值是向后的——如果你想向左走,它应该是
-1
,而不是
1

$(文档).ready(函数(){
//需要的东西
var canvas=document.getElementById(“myCanvas”);
var ctx=canvas.getContext(“2d”);
//开始时元素的位置
var ballposx=400;
var-ballposy=50;
var balldx=1;
var-balldy=2;
var balld2x=0;
var balld2y=0;
var p1posx=80;
变量p1posy=225;
变量p1dx=0;
var p1dy=0;
var p2posx=620;
var p2posy=225;
var p2dx=0;
var p2dy=0;
$(窗口)。按键(功能(e){
var代码=e.which;
开关(代码){
案例97:
p1dx=-1;
打破
案例100:
p1dx=1;
打破
案例37:
p2dx=-1;
打破
案例39:
p2dx=1;
打破
违约:
打破
}
});
函数绘图(){
clearRect(0,0,canvas.width,canvas.height);
//进球1
ctx.fillStyle=“#0F3F0F”;
var goal1=ctx.fillRect(0,150,50,150);
//目标2
ctx.fillStyle=“#204050”;
var goal2=ctx.fillRect(750,150,50,150);
ctx.beginPath();
//球
var ball=ctx.arc(ballposx,ballposy,60,0,2*Math.PI);
ctx.stroke();
//p1
ctx.fillStyle=“#FF0000”;
变量p1=ctx.fillRect(p1posx,p1posy,40,75);
//p2
ctx.fillStyle=“#0000FF”;
var p1=ctx.fillRect(p2posx,p2posy,40,75);
p1posx+=p1dx;
p2posx+=p2dx;
balldx+=balld2x;
balldy+=balld2y;
ballposx+=balldx;
ballposy+=balldy;
if(ballposy==240){
balldy=-1;
}否则如果(ballposy==60){
balldy=1;
}否则如果(ballposx==60){
balldx=1;
}else if(ballposx==740){
balldx=-1;
}else if(ballposx==p1posx&&ballposy


抱歉,您的浏览器不支持此功能问题出在哪里?当我单击所有case语句中您需要的
break
s键时,什么都没有发生任何事情?未报告错误?您不应该每次调用
draw
时都添加
keypress
处理程序。在函数外执行一次。我尝试添加break,但它仍然不移动,但之前它出错了,所以这确实有帮助!