gpt4 book ai didi

javascript - 在 Canvas 中创建流畅的动画

转载 作者:行者123 更新时间:2023-11-30 19:45:53 25 4
gpt4 key购买 nike

我有一个正在渲染图像的 Canvas 对象。当用户单击按钮时,图像将向右移动。我的问题是这个 Action 不流畅。图像只是跳到指定位置。我怎样才能让这个 Action 流畅? This is the codepen example谁能帮帮我?

 $(window).on('load', function () {
myCanvas();
});

function myCanvas() {
var c = document.getElementById("myCanvas");
var ctx = c.getContext("2d");
var x = 0;

function fly() {

ctx.clearRect(0, 0, c.width, c.height);
ctx.closePath();
ctx.beginPath();

var img = new Image();
img.onload = function () {
ctx.drawImage(img, x, 0);
};
img.src = 'http://via.placeholder.com/200x200?text=first';
}

fly();

$('#movebutton').click(function () {
for (i = 0; i < 200; i++) {
x = i;
requestAnimationFrame(fly);
}
});

}
 <canvas id="myCanvas" width="960" height="600"></canvas>
<button id="movebutton">Move</button>
<script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>

最佳答案

首先,为什么要在帧渲染函数中加载图像 - 如果缓存被禁用,它会在每一帧请求图像!

我重写了脚本,使动画线性流畅,你可以编辑速度变量来调整移动速度。

      $(window).on('load', function () {
var img = new Image();
img.onload = function () {
myCanvas(img);
};
img.src = 'http://via.placeholder.com/200x200?text=first';

});

function myCanvas(img) {
var c = document.getElementById("myCanvas");
var ctx = c.getContext("2d");
var x = 0;
var last_ts = -1
var speed = 0.1

function renderScene() {
ctx.clearRect(0, 0, c.width, c.height);
ctx.closePath();
ctx.beginPath();
ctx.drawImage(img, x, 0);
}

function fly(ts) {
if(last_ts > 0) {
x += speed*(ts - last_ts)
}
last_ts = ts

if(x < 200) {
renderScene()
requestAnimationFrame(fly);
}
}
renderScene()
$('#movebutton').click(function () {
x = 0;
requestAnimationFrame(fly);
});

}

关于javascript - 在 Canvas 中创建流畅的动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54945872/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com