| 首页 | 新闻 | 网页 | 设计 | 色彩 | 原创 | 视觉 | 素材 | 动漫 | 酷站 | 策划 | 文案 | 访谈 | 运营 | 编程 | 数据库 | 服务器 | 下载 | 图库 | 
您的位置: 幽幽天空 > 网页 > 网页制作 > Flash教程 > ActionScript教程 > 文章正文 用户登录
随机音乐代码
关于random()随
从n个数中随机选出
一定范围内随机排
AS随机调用外部MP
随机排列的链接系
“笨虫虫” 随机爬
两种方法取得n个随
产生不重复的随机
随机转盘游戏

“随机树”生成           

“随机树”生成

作者:佚名 来源:闪吧 作者: boom1979010 更新:2007-1-13 20:36:57 错误报告 我要投稿

用程序随机生成树冠,说明一下,元件“树”里的dp值控制树枝生长的深度,越高的话则分的越多,但请注意,dp超过13就有可能造成FLASH运行缓慢。
效果SWF
sz01.swf

我解释一些代码的用处,以“右叉”的最后一帧代码来解释。

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 
  • 上一篇文章:

  • 下一篇文章:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
    发表评论:
    姓名:  评 分: 1分 2分 3分 4分 5分
     
  • 严禁发表危害国家安全、政治、黄色淫秽等内容的评论。
  • 用户需对自己在使用幽幽天空服务过程中的行为承担法律责任。
  • 本站管理员有权保留或删除评论内容。
  • 评论内容只代表机友个人观点,与本网站立场无关。