问题是,动画每帧都会创建一个三角形。但我想,只有一个三角形移动/动画。我该如何解决? 在当下画布在随机X和Y位置绘制一个三角形并向左移动,然后向右移动,依此类推。每个Frame画布都会创建一个新的三角形,但我只想让该画布为一个三角形设置动画。
window.onload = function () {
var canvas = document.getElementById('canvas');
var ctx = canvas.getContext('2d');
var W = canvas.width = window.innerWidth;
var H = canvas.height = window.innerHeight;
var x = Math.floor(Math.random()*W);
var y = Math.floor(Math.random()*H);
var speed = 20;
function animate() {
reqAnimFrame = window.mozRequestAnimationFrame ||
window.webkitRequestAnimationFrame ||
window.msRequestAnimationFrame ||
window.oRequestAnimationFrame
;
reqAnimFrame(animate);
x += speed;
if(x <= 0 || x >= W - 300){
speed = -speed;
}
draw();
}
function draw() {
ctx.beginPath();
ctx.fillStyle = "rgba(0,204,142,0.5)";
ctx.moveTo(x,y);
ctx.lineTo(x + 150, y + (-180));
ctx.lineTo(x + 300, y);
ctx.scale(1,1);
ctx.rotate(Math.PI / 1);
ctx.fill();
}
animate();
};//onload function
答案 0 :(得分:1)
您还需要清除每个帧的画布:
function draw() {
ctx.clearRect(0, 0, ctx.canvas.width, ctx.canvas.height);
ctx.beginPath();
ctx.fillStyle = "rgba(0,204,142,0.5)";
ctx.moveTo(x,y);
ctx.lineTo(x + 150, y + (-180));
ctx.lineTo(x + 300, y);
ctx.scale(1,1);
ctx.rotate(Math.PI / 1);
ctx.fill();
}
PS:你的动画循环中不需要那个polyfill,它只会吃掉不必要的循环。把它放在脚本的开头,你会很好,而且你也缺少没有前缀的版本:
reqAnimFrame = window.requestAnimationFrame || /// you will need this too..
window.mozRequestAnimationFrame ||
window.webkitRequestAnimationFrame ||
window.msRequestAnimationFrame ||
window.oRequestAnimationFrame
;