0
我已经对付了几个教程来想出完美的粒子雪效果。我现在唯一需要做的就是重复粒子效果,并在我的背景和前景之间播放它的第二个版本。原来我仍然想保持最顶层。我试着在一个函数中包装代码,并用不同的名称创建其中的两个,但是我遇到了一些奇怪的错误。所以我没有破坏我已经拥有的东西,而是来到这里寻求有关情况的任何建议。这是我的代码。我正在使用Greensock动画库来处理我的时间轴和动画。粒子动画as3分层
import com.greensock.*;
import com.greensock.easing.*;
addChildAt(MC_BG, 0)
addChildAt(MC_FG, 2)
var tl:TimelineMax=new TimelineMax({paused:false});
function createFlake(offset) {
//create a flake (attach symbol in library with Class flake) and position on stage
var flake:Flake = new Flake();
flake.y=-50;
flake.x=randomRange(-10,1090);
flake.alpha=0;
addChild(flake);
//create timeline for each flake
var nestedTl:TimelineMax = new TimelineMax();
//how much wiggling/zig zagging
var wiggle:Number=randomRange(15,35);
//zig or zag?
wiggle=Math.random() > .5?- wiggle:wiggle;
//how fast and big
var speed:Number=randomRange(5,15);
//fade and grow
nestedTl.insert(TweenMax.to(flake, .5, {alpha:randomRange(.5,1), scaleX:speed, scaleY:speed}));
//go down
nestedTl.insert(TweenMax.to(flake,speed, {y:800}));
//zig zag
nestedTl.insert(TweenMax.to(flake, speed*.15, {x:String(wiggle), repeat:Math.floor(randomRange(1,4)), yoyo:true, ease:Sine.easeInOut}));
tl.insert(nestedTl, offset);
}
//generate random num between a min and max value
function randomRange(min:Number, max:Number):Number {
return min + (Math.random() * (max - min));
}
function init() {
//create a bunch of flakes and add them to timeline
for (var count:Number = 0; count<10000; count++) {
var offset = count * 0.075;
createFlake(offset);
}
}
init();
任何帮助将不胜感激。
为什么使用这么多的时间表?您基本上为您的雪花效果创建10001个时间轴,并为30k个补间。您最好使用一系列薄片,通过一个循环(使用薄片的特性来存储临时数据)通过单个程序处理它们的摆动/旋转/下降,并且每帧创建几片薄片,以便最终获得恒定雪。然后创建下雪MCs的两个实例并且玩得开心。运行所有这些代码对于我目前的大脑状态来说是一个很大的代码,但它只包含未包装的补间插值代码。 – Vesper
那么我这样做的原因是雪花的变化最大。我尝试使用数组和程序代码,但雪总是以图案形式出现。我从不满意它如何下跌。此外,缓解正弦函数无法正常工作,或者会呈指数级增长。 –
对于所涉及的每个补间使用片状的本地参数作为“from”,“to”,“current”和“phase”值,用随机数初始化,相应地改变每一帧,并且不应再对雪进行图案化。 – Vesper