用户名: 密码: 免费注册 忘记密码? 网站地图 | 加入收藏 | 设为首页
首页 | 新闻 | 工具 | 系统 | 办公 | 聊天 | 多媒体 | 网页 | 运营 | 平面 | 欣赏 | 数据库 | 程序 | 服务器 | 组网
网页 | 3dmax | Ghost | Windows Xp| Dreamweaver | photoshop | Flash | office | Alexa | Css | QQ | Asp | PHP | Jsp | Access
Flash MX 2004入门 | 网站推广策略 | CorelDRAW入门 | ASP学习 | 网站建设大师功 | Word入门
  iTbulo.com > 学院 > 网页制作教程 > Flash教程 > Action应用 > 文章正文
“随机树”生成
iTbulo.COM 2006-2-12 boom1979010()

用程序随机生成树冠,说明一下,元件“树”里的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;
}

当然管理员也提到了这是分形。

文章搜索
相关资讯
相关文章 相关下载
ActionScript 3.0 概要
焦点信息