我正试图用three.js来修正一个函数。每件事都按预期工作,但FPS在运行功能20-30秒后大幅下降。该函数设置为移动精灵,然后在精灵到达目的地后销毁精灵。然后它会在随机位置产生一个新的精灵。在移动精灵之前,它以大约30 FPS的速度移动。当我开始移动精灵时,FPS下降到20。在大约20到30秒之后它大约是9.如果我停止移动精灵,FPS会在30处重新启动。但是如果我再次尝试移动精灵而不是重复之前的过程,它会直接返回到大约9。我知道javascript是一个垃圾收集的语言,所以我认为它只需要一些时间来清理。但即使我让它坐了10分钟,它仍然只是回到9 FPS。另一方面,如果我重新加载页面,则该过程全部开始。我也试过移动精灵而不是破坏它并重新生成,但我得到同样的问题。我也尝试使用.dispose方法,但没有运气。这是代码。
function spriteAI1() {
//console.log(c2Sprite.position.x);
//console.log(ranLocX);
//console.log(ranTen);
console.log(c2Sprite.position);
//var ranTen = Math.floor((Math.random()*8)+2);
if (c2Sprite.position.x > 30 && c2Sprite.position.x <= 450) {
//var ranTen = Math.floor((Math.random()*8)+1);
c2Sprite.translateX( -6 );
} else if (c2Sprite.position.y > 30 && c2Sprite.position.y <= 250) {
//var ranTen = Math.floor((Math.random()*8)+1);
c2Sprite.translateY( -6 );
} else if (c2Sprite.position.z > 30 && c2Sprite.position.z <= 350) {
//var ranTen = Math.floor((Math.random()*8)+1);
c2Sprite.translateZ( -6 );
} else if (c2Sprite.position.x < -30 && c2Sprite.position.x >= -450) {
//var ranTen = Math.floor((Math.random()*8)+1);
c2Sprite.translateX( 6 );
} else if (c2Sprite.position.y < -30 && c2Sprite.position.y >= -250) {
//var ranTen = Math.floor((Math.random()*8)+1);
c2Sprite.translateY( 6 );
} else if (c2Sprite.position.z < -30 && c2Sprite.position.z >= -350) {
//var ranTen = Math.floor((Math.random()*8)+1);
c2Sprite.translateZ( 6 );
} else if (c2Sprite.position.x < 31 && c2Sprite.position.y < 31 && c2Sprite.position.z < 31 && c2Sprite.position.x > -31 && c2Sprite.position.y > -31 && c2Sprite.position.z > -31) {
var locX = Math.floor((Math.random()*450)+1);
locX *= Math.floor(Math.random()*2) == 1 ? 1 : -1;
var locY = Math.floor((Math.random()*250)+1);
locY *= Math.floor(Math.random()*2) == 1 ? 1 : -1;
var locZ = Math.floor((Math.random()*350)+1);
locZ *= Math.floor(Math.random()*2) == 1 ? 1 : -1;
//c2Sprite.delete;
scene.remove(c2Sprite);
//console.log("AI1");
//geometry.dispose();
//material.dispose();
//texture.dispose();
c2ImgMaterial.dispose();
c2Sprite.position.set( locX, locY, locZ );
scene.add( c2Sprite );
//c2Sprite.clone;
}
}