Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/457.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 我需要帮助创建淡入淡出效果_Javascript_Three.js - Fatal编程技术网

Javascript 我需要帮助创建淡入淡出效果

Javascript 我需要帮助创建淡入淡出效果,javascript,three.js,Javascript,Three.js,我正在创造一个星场效应,当星星停止移动时,我需要它们发光 我试过TweenMax,但是所有的元素都一下子消失了 我用于创建星星的代码如下: function createStars() { groupStars = new THREE.Group(); groupStars.position.x=0; groupStars.position.y=0; groupSt

我正在创造一个星场效应,当星星停止移动时,我需要它们发光

我试过TweenMax,但是所有的元素都一下子消失了

我用于创建星星的代码如下:

function createStars() {


                groupStars = new THREE.Group();
                groupStars.position.x=0;
                groupStars.position.y=0;
                groupStars.position.z=0;

                var materialList = [];
                var boxGeo = new THREE.CircleGeometry(1, 50);
                for ( var i = 0; i < 1000; i ++ ) {
                    materialList.push (new THREE.MeshPhongMaterial({
                        color: new THREE.Color(0xFFFFFF),
                        specular: new THREE.Color(0xFFFFFF),
                        shininess: 10,
                        flatShading: THREE.FlatShading,
                        transparent: 1,
                        opacity: 1,
                        side: THREE.DoubleSide
                    }));
                    box = new THREE.Mesh(boxGeo, materialList[i]);
                    box.position.x = Math.random() * 1400 - 500;
                    box.position.y = Math.random() * 1400 - 1000;
                    box.position.z = Math.random();

                    groupStars.add( box );
                    stars.push(box);
                }

                scene.add( groupStars );
            }
我已经设法对元素产生了一些影响,但不完全是我想要的

我想得到这样的东西:

提前谢谢

编辑

多亏了我发布的示例,我成功地将其添加到animateStars()函数中,我不知道这是否是实现此功能的最干净的方法,但我在这方面还是新手:

function animateStars() {

                var time = Date.now() * 0.005;

                for(var i=0; i<stars.length; i++) {

                    star = stars[i];
                    var randomItem = stars[Math.floor(Math.random()*stars.length)];
                    starWidth = star.scale.x;
                    starHeight = star.scale.y;
                    var k = 50;
                    if( speed == false ) {
                        star.position.z +=  i/20;
                    } else {

                        star.scale.y = 0.6 * ( 1 + Math.sin( 0.6 * i - time ) );
                        star.scale.x = 0.6 * ( 1 + Math.sin( 0.6 * i - time ) );

                    }

                    if(star.position.z>1000){
                        star.position.z-=2000;
                    }

                }

            }
函数animateStars(){
var time=Date.now()*0.005;
对于(变量i=0;i1000){
星位置z-=2000;
}
}
}

到底有什么不符合预期?你在星星之间循环,随机挑选一颗,这意味着同一颗星星可能会被挑选不止一次,而且最终可能不会全部挑选出来。我不确定你是想全部或只是部分动画,但你可能必须重新考虑随机部分。看看这个例子,谢谢prisoner849,这个例子帮助很大。@user2324366不客气:)到底有什么不符合预期?你在星星之间循环,随机挑选一颗,这意味着同一颗星星可能会被挑选不止一次,而且最终可能不会全部挑选出来。我不确定您是想全部动画还是只想部分动画,但您可能需要重新考虑随机部分。请看一下这个例子,谢谢prisoner849,这个例子帮助很大。@user2324366不客气:)
TweenMax.to(randomItem.scale, 2, {x: i*0.005, y: i*0.005, z: i*0.005, yoyo: true, repeat: -1});
function animateStars() {

                var time = Date.now() * 0.005;

                for(var i=0; i<stars.length; i++) {

                    star = stars[i];
                    var randomItem = stars[Math.floor(Math.random()*stars.length)];
                    starWidth = star.scale.x;
                    starHeight = star.scale.y;
                    var k = 50;
                    if( speed == false ) {
                        star.position.z +=  i/20;
                    } else {

                        star.scale.y = 0.6 * ( 1 + Math.sin( 0.6 * i - time ) );
                        star.scale.x = 0.6 * ( 1 + Math.sin( 0.6 * i - time ) );

                    }

                    if(star.position.z>1000){
                        star.position.z-=2000;
                    }

                }

            }