您好,我是编程新手,我制作了一个简单的 JavaScript,它绘制了简单的 canvas.arc 圆圈,这些圆圈在 2D x,y 坐标中移动。
只是出于好奇,我用 1 个粒子 10、100、1000 等运行动画,并不断增加粒子的数量。
我观察到的是粒子平稳地移动到数百个,但随后变得非常滞后*(对不起,我不知道这种现象的正确术语)
我在想,我的电脑怎么能如此流畅地运行复杂得多的游戏和软件,却难以运行我制作的简单脚本?
我想知道这背后的原因或背后的理论!
ps抱歉,无论如何我对我的英语没有信心,请发布可能有助于我理解这个问题的资源或其他链接。
这是代码。它非常简单,但如果有办法提高性能,请告诉我想知道未来的脚本。
尝试增加粒子数:
var particleCount = 10000;
window.requestAnimFrame = (function(){
return window.requestAnimationFrame ||
function(callback){
window.setTimeOut(callback,1000/60);
};
})();
var particleCount = 100,
particles = [];
var canvas = document.getElementById("canvas");
var ctx = canvas.getContext("2d");
var wW = window.innerWidth, wH = window.innerHeight;
canvas.width = wW;
canvas.height = wH;
function paintCanvas(){
ctx.fillStyle = "rgba(0,0,0,1)";
ctx.fillRect(0,0,wW,wH);
}
function Particle(){
this.x = Math.random() * wW;
this.y = Math.random() * wH;
var numx = Math.random()*2;
var numy = Math.random()*2;
numx *= Math.floor(Math.random()*2) == 1 ? 1 : -1;
numy *= Math.floor(Math.random()*2) == 1 ? 1 : -1;
this.vx = numx;
this.vy = numy;
this.radius = Math.random() * (Math.random()*5);
this.draw = function(){
ctx.fillStyle = "white";
ctx.beginPath();
ctx.arc(this.x,this.y,this.radius,0,Math.PI*2,false);
ctx.fill();
}
}
for (var i=0; i<particleCount; i++){
particles.push(new Particle());
}
function draw(){
paintCanvas();
for(var i = 0; i < particleCount; i++){
p = particles[i];
p.draw();
}
update();
}
function update(){
for (var i =0; i < particleCount; i++){
p = particles[i];
p.x += p.vx;
p.y += p.vy;
if(p.x + p.radius > wW){
p.x = p.radius;
}
else if(p.x - p.radius < 0){
p.x = wW - p.radius;
}
if(p.y + p.radius > wH){
p.y = p.radius;
}
else if(p.y - p.radius < 0){
p.y = wH - p.radius;
}
}
}
function animloop(){
draw();
requestAnimFrame(animloop);
}
animloop();