Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何制作平滑的汽车运动动画?_Javascript_Animation_Canvas - Fatal编程技术网

Javascript 如何制作平滑的汽车运动动画?

Javascript 如何制作平滑的汽车运动动画?,javascript,animation,canvas,Javascript,Animation,Canvas,我创建了一个赛马场游戏,你只需驾驶一辆汽车,领取黄色奖金,避开黑色障碍物 问题是,当你尝试向左或向右行驶时,我的汽车的动画并不平滑 有人能帮我理解如何在驾驶汽车时制作平滑的动画吗? 我怎样才能添加一条自然的曲线而不是笔直的道路? 另外,我知道我的ColissionChecker功能并不完美,但这是另一天的问题。 我不知道为什么在snippet的整个页面中,画布非常小,你什么都看不到 var canvas=document.querySelector'canvas'; var c=canvas.

我创建了一个赛马场游戏,你只需驾驶一辆汽车,领取黄色奖金,避开黑色障碍物

问题是,当你尝试向左或向右行驶时,我的汽车的动画并不平滑

有人能帮我理解如何在驾驶汽车时制作平滑的动画吗? 我怎样才能添加一条自然的曲线而不是笔直的道路? 另外,我知道我的ColissionChecker功能并不完美,但这是另一天的问题。 我不知道为什么在snippet的整个页面中,画布非常小,你什么都看不到

var canvas=document.querySelector'canvas'; var c=canvas.getContext'2d'; canvas.width=window.innerWidth; canvas.height=window.innerHeight; var线宽=10; var-LineHeight=80; var-boundaryTopOffset=5; var boundaryLeftOffset=2; var boundaryPadding=50; var boundaryMiddleOffset=2; 无功转速=50; 让executedTimer=false; 让dateDiff; 设currentScore=0; var leftBoundary=[]; var rightBoundary=[]; var middleBoundary=[]; var红利=[]; 风险价值=[]; var car={ x:1200, y:800 } document.addEventListener'keydown',functionevent{ 让key=event.which ifkey==37{ 汽车.x-=速度; }否则ifkey==39{ 汽车.x+=速度; }否则ifkey==38{ 汽车.y-=速度; }否则ifkey==40{ 汽车。y+=速度; } } 对于x=0;x<8;x++{ 左边界[x]= { 偏移量:boundaryLeftOffset+400, 地形偏移:0, 宽度:线宽, 高度:线宽, 颜色:红色 }; } 对于x=0;x<8;x++{ 中间边界[x]= { 偏移量:boundaryMiddleOffset+890, 地形偏移:0, 宽度:线宽, 高度:线宽, 颜色:白色 }; } 对于x=0;x<8;x++{ 右边界[x]= { 偏移量:boundaryLeftOffset+1400, 地形偏移:0, 宽度:线宽, 高度:线宽, 颜色:红色 }; } var循环=0, totalCycle=线宽+边界填充; window.requestAnimationFramedraw; 函数图{ ifexecutedTimer==false{ 障碍物。推{x:Math.floorMath.random*1000+450,y:10}; timerStart; } drawCanvasboundaryLeftOffset-2,0,canvas.width,canvas.height,“灰色”; 循环=循环+4%总循环; 用于[leftBoundary、rightBoundary、middleBoundary]的边界{ 对于i=0;i=1000{ 障碍物。推{x:Math.floorMath.random*900+490,y:10}; 奖金。推送{x:Math.floorMath.random*900+490,y:10} } 抽签得分; 牵引障碍; 提取奖金; 牵引车; 障碍物检查器; 骨质疏松; 时间检查; window.requestAnimationFramedraw; } 函数drawBoundaryx,elementColor{ c、 fillStyle=元素颜色; c、 fillRectx.偏移+100,x.地形偏移,x.宽度,x.高度; } 功能drawCanvasposX、posY、宽度、高度、元素颜色{ c、 fillStyle=元素颜色; c、 fillRectposX、posY、宽度、高度; } 多功能牵引车{ c、 填充样式=蓝色; c、 fillRectcar.x,car.y,100150; c、 填充样式=黑色; forvar i=0;i<101;i+=100{ c、 开始路径; c、 ellipsecar.x+i,car.y+10,10,15,Math.PI,0,2*Math.PI; c、 ellipsecar.x+i,car.y+140,10,15,Math.PI,0,2*Math.PI; c、 填充; c、 封闭路径; } } 函数timerStart{ 日期1=新日期; ExecuteTimer=true; } 函数timerCheck{ var date2=新日期; dateDiff=Math.absdate1-date2; ifdateDiff>=1000date1=date2; } 功能评分{ c、 font='25px Verdana'; c、 填充样式='hsl'+0+',100%,50%'; c、 fillText'Score:'+currentScore,100,80; } 功能障碍{ c、 fillStyle=080D23; 障碍物,障碍物{ 对于i=0;i<0.length;i++{ c、 障碍物[i].x,障碍物[i].y+=5,80,50; } } } 功能抽奖{ c、 fillStyle=F2C14A; 奖金[奖金]{ 对于i=0;i<0.length;i++{ c、 开始路径; c、 Arc红利[i].x,红利[i].y+=5,20,0,Math.PI*2,false; c、 填充; c、 封闭路径; } } } 函数obstacleColisionChecker{ 对于i=0;i<0.length;i++{ 如果car.y+20-障碍物[i]?.y+20>0和car.y-20-障碍物[i]?.y+20<100 &&车x+100-障碍物[i]?.x+20>0和车x-100-障碍物[i]?.x-20<200{ 当前分数-; } } } 功能性骨质疏松检查仪{ 对于i=0;i<0.length;i++{ 如果car.y+20-奖金[i]?.y+20>0和&car.y-20-奖金[i]?.y+20<100 &&车x+100-奖金[i]?.x+20>0和车x-100-奖金[i]?.x-20<200{ currentScore++; } } } 帆布{ 边框:1px纯黑; 边距:0!重要; 填充:0!重要; } 身体{ 保证金:0; } 在代码中,速度是恒定的。 那辆车要么在那一边开动 速度或速度不移动

这就是问题所在:你需要引入加速度

您应该在每一帧上设置car.x+=速度,并在按键处理程序中更改速度。这对你来说是个好的开始