无法优化一些代码

时间:2013-09-26 20:49:20

标签: javascript three.js

我正试图用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;
            }
        }   

0 个答案:

没有答案