Flash实例:“随机树”生成 |
| 作者:eidoit 来源:蓝色理想 更新:2006-4-6 21:08:26 错误报告 我要投稿 |
|
用程序随机生成树冠,说明一下,元件“树”里的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; }

当然管理员也提到了这是分形。 |
|
| 文章录入:skyuu 责任编辑:skyuu |
|
| 【字体:小 大】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口】 |