Javascript 画布需要太多时间才能向上移动图片
我试图将Javascript 画布需要太多时间才能向上移动图片,javascript,html,image,canvas,lag,Javascript,Html,Image,Canvas,Lag,我试图将上的图像移动到跳转位置 index.html <!DOCTYPE html> <html> <head> <title>Ball Jump</title> </head> <body> <img src="./assets/ball.png" height="0px" width="0px" id="ball"> <br> <br> <canvas heigh
上的图像移动到跳转位置
index.html
<!DOCTYPE html>
<html>
<head>
<title>Ball Jump</title>
</head>
<body>
<img src="./assets/ball.png" height="0px" width="0px" id="ball">
<br>
<br>
<canvas height="210px" width="350px" id="paper" onclick="play()"></canvas>
<script type="text/javascript" src="./main.js"></script
</body>
</html>
跳球
50) {
clearRect(0,y-1,70,y+50);
画笔图像(球,0,y,70,50);
y--;
}
else{clearInterval(jump);}
}
var跳跃=设置间隔(向上,10);
函数down(){
如果(y<150){
clearRect(0,y-1,70,y+50);
画笔图像(球,0,y,70,50);
y++;
}
否则{clearInterval(fall);}
}
var下降=设定间隔(下降,10);
}
但问题是,球落后了,上升需要更多的时间,然而,即使两个功能都设置为10毫秒,球也会下降得很好。
请帮忙 对于在浏览器上平稳运行的动画,您应该真正使用requestAnimationFrame循环而不是setInterval 在此处签出示例: 原因如下:
.我认为您应该使用
requestAnimationFrame
而不是setInterval
示例
const canvas=document.querySelector('#canvas');
const context=canvas.getContext('2d');
常量图像=新图像();
image.src=”https://picsum.photos/seed/picsum/50/50";
image.addEventListener(“加载”,加载);
函数加载(事件){
loop();
}
设x=0;
设y=0;
设t=0;
设r=50;
const inc=Math.PI/90;
函数循环(){
const width=canvas.width;
const height=canvas.height;
clearRect(0,0,宽度,高度);
context.drawImage(image,x,y,image.width,image.height);
x=100+r*Math.cos(t);
y=100+r*Math.sin(t);
t=t+inc;
请求动画帧(循环);
}
我不会使用多个setInterval
一个就可以…以下是一个例子:
var paper=document.getElementById('paper');
var brush=paper.getContext('2d');
变量y=100;
无功转速=1;
函数绘图(){
如果((y<10)|(y>150)){
速度*=-1
}
y+=速度
clearRect(0,0,160,300);
画笔。fillRect(10,y,10,10);
}
函数播放(){
设置间隔(抽签,10);
}
draw()
是的,他们应该这样做,但他们应该做对。在240Hz监视器上,动画的运行速度将比60Hz监视器快4倍。使用时间戳构建增量时间,以创建恒定的动画速度。
'use strict'
var paper = document.getElementById('paper');
var ball = document.getElementById('ball');
var brush = paper.getContext('2d');
brush.drawImage(dino, 0, 150, 70, 50);
var y = 150;
function play() {
up();
function up() {
if (y > 50) {
brush.clearRect(0, y-1, 70, y+50);
brush.drawImage(ball, 0, y, 70, 50);
y--;
}
else { clearInterval(jump); }
}
var jump = setInterval(up, 10);
function down() {
if (y < 150) {
brush.clearRect(0, y-1, 70, y+50);
brush.drawImage(ball, 0, y, 70, 50);
y++;
}
else { clearInterval(fall); }
}
var fall = setInterval(down, 10);
}