2013-12-13 51 views
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(); 

任何帮助将不胜感激。

+0

为什么使用这么多的时间表?您基本上为您的雪花效果创建10001个时间轴,并为30k个补间。您最好使用一系列薄片,通过一个循环(使用薄片的特性来存储临时数据)通过单个程序处理它们的摆动/旋转/下降,并且每帧创建几片薄片,以便最终获得恒定雪。然后创建下雪MCs的两个实例并且玩得开心。运行所有这些代码对于我目前的大脑状态来说是一个很大的代码,但它只包含未包装的补间插值代码。 – Vesper

+0

那么我这样做的原因是雪花的变化最大。我尝试使用数组和程序代码,但雪总是以图案形式出现。我从不满意它如何下跌。此外,缓解正弦函数无法正常工作,或者会呈指数级增长。 –

+0

对于所涉及的每个补间使用片状的本地参数作为“from”,“to”,“current”和“phase”值,用随机数初始化,相应地改变每一帧,并且不应再对雪进行图案化。 – Vesper

回答

0

答案很简单,我完全忽略了它。我制作了3个空白的电影剪辑,并且在其中的每一个中我都放了一个稍微修改过的代码。然后我把每个电影剪辑放在我想要的之间的一个图层上,而鲍勃是你的叔叔,它工作正常。