用程序随机生成树冠,说明一下,元件“树”里的dp值控制树枝生长的深度,越高的话则分的越多,但请注意,dp超过13就有可能造成FLASH运行缓慢。
效果:
我解释一些代码的用处,以“右叉”的最后一帧代码来解释。
stop();
if(dp>0){//dp用来控制树枝的生长,当dp<0的时候,树枝将不在分裂生长。
//以下是正上方新树枝的代码
k=random(4)+1;//k用来选择树形,分别是直形,左分形,右分形和中分行。
_parent.attachMovie("sz_0"+k,"sz"+_parent.dp,_parent.dp);//生成一个新的树枝。
lik=_parent["sz"+_parent.dp];//用LIK锁定这个树枝,方便以后控制
rp=this._rotation+0;//rp是新的树枝的根坐标(黄点)相对于现在这个树枝根坐标(蓝点)的角度,此数值影响到将要新生成的新树枝的坐标。这里是以极坐标的角度来考虑的,因为该树枝的第一个点在正上方,所以修正值是0。
lp=62;//在rp这个方向上,新树枝根坐标的距离。
_parent.dp++;//深度控制,大家可以不用考虑
lik._x=this._x+lp*Math.sin(rp/180*Math.PI)*scal/100;
lik._y=this._y-lp*Math.cos(rp/180*Math.PI)*scal/100;
//以上算式计算的是新树枝的根坐标,具体意思请参考极坐标和直角坐标换算的方式。里面的scal是本树枝的缩放度。它会对坐标产生影响。
lik.scal=this.scal*_parent.jian;//新树枝的缩放度要比当前树枝的缩放度小一些
lik._xscale=lik.scal;
lik._yscale=lik.scal;
lik._rotation=rp+random(30)-15;;//新树枝的角度是当前树枝的角度向左右各15度随机摆动。(就是-15到+15度)
lik.dp=this.dp-1;//新树枝的生长度-1;
//以下是右侧新树枝的代码
k=random(4)+1;
_parent.attachMovie("sz_0"+k,"sz"+_parent.dp,_parent.dp);
lik=_parent["sz"+_parent.dp];
rp=this._rotation+20;//注意20度角度是这个新树枝的极坐标角度。
lp=52;//52是距离
_parent.dp++;
lik._x=this._x+lp*Math.sin(rp/180*Math.PI)*scal/100;
lik._y=this._y-lp*Math.cos(rp/180*Math.PI)*scal/100;
lik.scal=this.scal*_parent.jian;
lik._xscale=lik.scal;
lik._yscale=lik.scal;
lik._rotation=rp+random(30)+5;;//角度会向右偏一些,所以是当前角度增加5到35之间
lik.dp=this.dp-1;
}