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