Can';不要在Javascript中正确结束游戏

Can';不要在Javascript中正确结束游戏,javascript,html5-canvas,Javascript,Html5 Canvas,我是使用JavaScript进行游戏编程的初学者。这是我尝试做的第一场比赛。比赛结束后,我无法显示时间 游戏详情: 鼠标用于移动与球碰撞并改变方向的块 当球经过画布左端时,游戏结束,画布上的显示停止 当上述事件发生且显示时间的代码随后出现时,变量game将变为true。(但它不起作用) var画布; var canvascontext; var ballX=50; var-ballY=50; var ballXspeed=15; var-ballYspeed=15; var-Battery=2

我是使用JavaScript进行游戏编程的初学者。这是我尝试做的第一场比赛。比赛结束后,我无法显示时间

游戏详情:

  • 鼠标用于移动与球碰撞并改变方向的块

  • 当球经过画布左端时,游戏结束,画布上的显示停止

  • 当上述事件发生且显示时间的代码随后出现时,变量game将变为true。(但它不起作用)

  • var画布;
    var canvascontext;
    var ballX=50;
    var-ballY=50;
    var ballXspeed=15;
    var-ballYspeed=15;
    var-Battery=225;
    var deltaY;
    var gameover=false;
    函数calculateMousePos(evt){
    var rect=canvas.getBoundingClientRect();
    var root=document.documentElement;
    var mouseX=evt.clientX-rect.left-root.scrollLeft;
    var mouseY=evt.clientY-rect.top-root.scrollTop;
    返回{
    x:鼠标,
    y:老鼠
    };
    }
    window.onload=函数(){
    canvas=document.getElementById('gameCanvas');
    canvasContext=canvas.getContext('2d');
    var fps=30;
    设置间隔(两次调用,1000/30);
    canvas.addEventListener('mousemove',函数(evt){
    var mousePos=calculateMousePos(evt);
    白板=鼠标点。y-50;
    })
    var date1=新日期();
    }
    函数calleath(){
    如果(gameover==true){
    回来
    }否则{
    移动一切();
    抽屉物品();
    }
    }
    函数moveEverything(){
    ballX=ballX+ballX速度;
    巴利=巴利+巴利速度;
    如果(球>画布宽度){
    ballXspeed=-ballXspeed;
    }
    if(ballY>canvas.height | | ballY<0){
    ballYspeed=-ballYspeed;
    }
    if(ballX<0){
    如果(球>桨和球<(桨+150)){
    ballXspeed=-(ballXspeed+ballXspeed*0.1);
    德尔泰=巴利-(75+桨);
    ballYspeed=deltaY*0.35;
    }否则{
    gameover=true;
    var date2=新日期();
    var diff=date2-date1;
    document.getElementById(“time”).innerHTML=diff;
    }
    }
    }
    函数drawerything(){
    canvasContext.fillStyle='black';
    canvasContext.fillRect(0,0,canvas.width,canvas.height);
    canvasContext.fillStyle='white';
    canvasContext.fillRect(0,百利,10150)
    canvasContext.fillStyle='red';
    canvasContext.beginPath();
    canvasContext.arc(ballX,ballY,15,0,Math.PI*2);
    canvasContext.fill();
    }
    函数重置(){
    gameover=false;
    ballX=画布宽度;
    ballY=画布高度/2;
    ballYspeed=15;
    球速=15;
    date1=新日期();
    }
    
    

    重置
    您在window.onload中本地声明了
    date1
    ,这就是为什么它在其他函数中不可访问的原因。从那里删除
    var
    ,并将
    var date1
    添加到顶部,使其成为全局的。

    一些事情

  • 启动date1 onload-它必须在全局范围内
  • 正确更新日期1(键入新日期())
  • 重置日期和文本
  • var画布;
    var canvascontext;
    var ballX=50;
    var-ballY=50;
    var ballXspeed=15;
    var-ballYspeed=15;
    var-Battery=225;
    var deltaY;
    var gameover=false;
    var date1=0;//全局变量
    函数calculateMousePos(evt){
    var rect=canvas.getBoundingClientRect();
    var root=document.documentElement;
    var mouseX=evt.clientX-rect.left-root.scrollLeft;
    var mouseY=evt.clientY-rect.top-root.scrollTop;
    返回{
    x:鼠标,
    y:老鼠
    };
    }
    window.onload=函数(){
    canvas=document.getElementById('gameCanvas');
    canvasContext=canvas.getContext('2d');
    var fps=30;
    设置间隔(两次调用,1000/30);
    canvas.addEventListener('mousemove',函数(evt){
    var mousePos=calculateMousePos(evt);
    白板=鼠标点。y-50;
    })
    date1=new Date();//更新全局变量
    }
    函数calleath(){
    如果(gameover==true){
    回来
    }否则{
    移动一切();
    抽屉物品();
    }
    }
    函数moveEverything(){
    ballX=ballX+ballX速度;
    巴利=巴利+巴利速度;
    如果(球>画布宽度){
    ballXspeed=-ballXspeed;
    }
    if(ballY>canvas.height | | ballY<0){
    ballYspeed=-ballYspeed;
    }
    if(ballX<0){
    如果(球>桨和球<(桨+150)){
    ballXspeed=-(ballXspeed+ballXspeed*0.1);
    德尔泰=巴利-(75+桨);
    ballYspeed=deltaY*0.35;
    }否则{
    gameover=true;
    var date2=新日期();
    var diff=date2-date1;
    document.getElementById(“time”).innerHTML=parseInt(diff/1000)+“秒”;//显示秒数
    }
    }
    }
    函数drawerything(){
    canvasContext.fillStyle='black';
    canvasContext.fillRect(0,0,canvas.width,canvas.height);
    canvasContext.fillStyle='white';
    canvasContext.fillRect(0,百利,10150)
    canvasContext.fillStyle='red';
    canvasContext.beginPath();
    canvasContext.arc(ballX,ballY,15,0,Math.PI*2);
    canvasContext.fill();
    }
    函数重置(){
    gameover=false;
    ballX=画布宽度;
    ballY=画布高度/2;
    ballYspeed=15;
    球速=15;
    date1=新日期();//重置日期
    document.getElementById(“time”).innerHTML=“”;//重置字段
    }
    
    

    重置
    因此我为您制作了一个代码段,当我单击重置时控制台会给出一个错误。-您需要'date1=新日期()`还有更多的问题。但是,拼写错误不会导致给定的问题。(当该命令执行时会变得很明显。)