|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
不是MX版本升级到MX2004时的那么简单,而是实现了新的飞跃。
提醒:这是个很妙的效果,说这句话是为了引发你的浏览乐趣,供应思绪为主,以笔墨为例,更好的效果如把笔墨换成图片散射按照这个思绪应该能够很完善的完成,同时,第三部分的BUG已扫除,以是我对本文章作下修正,感谢列位的协助。
第一部分:统一坐标点散射,相似烟花效果
方针:大批笔墨从一个原点向周围散射
“大批”———————很明显,要用到duplicatemovieclip大概attachmovie,这里我选择attachmovie,至于
甚么缘故原由,以下我将论述。
“散射”——————x,y偏移,分离Math.random()就是随机偏移.随机数的取值要有正且有负,由于散射是五湖四海的X,Y偏移。
“一个原点”————这个效果的道理了解关头点就在这里,一个原点,换句话说就是将复制出来的MC坐标回于一个地位,如许恣意一个x,y偏移值,播放起来就是一个散射,他分歧于那种“分歧坐标点散射”,即假如你把复制出来的坐标值随机设定,加上一个纯真的x,y偏移,MC会各处乱飞,画面会毫无纪律。这一点必定要了解。
完成步骤:
1,任意做个带笔墨的MC,在库中linkage名为mymc
2,舞台工夫轴代码:
LEFT=0;
TOP=0;
RIGHT=Stage.width;
BOTTOM=Stage.height;
maxspeed=25
maxmc=100
minmc=20
functionrandrange(min,max){
varrandomnum=Math.floor(Math.random()*(max-min+1))+min
returnrandomnum
}//自界说函数,取两数之间的随机数
mcnum=randrange(minmc,maxmc)
trace(mcnum)//测试用
for(i=0;i<=mcnum;i++){
dupmc=attachMovie("mymc","mymc"+i,10+i)
trace(dupmc)//测试用
dupmc._x=200
dupmc._y=200//设定统一个坐标地位
dupmc._xscale=dupmc._yscale=randrange(0,100)
dupmc.speedx=randrange(-maxspeed,maxspeed)
dupmc.speedy=randrange(-maxspeed,maxspeed)//每个复制出来的MC城市有一个随机x,y偏移(从本人的负值到本身值,包管了坐标既有正也有负)
dupmc.onEnterFrame=function(){
this._x+=this.speedx
this._y+=this.speedy
if(this._x<LEFT||this._x>RIGHT||this._y<TOP||this._y>BOTTOM){
this.removeMovieClip();
}//endif
}
}
ok,代码停止,以下我谈谈我为何不必duplicatemovieclip而用attachmovie
我们都晓得把duplicatemovieclip或attachmovie后面加一个变量,很便利调剂MC属性,誊写也复杂,但实
现体例有两种。
后来我是用duplicatemovieclip,后面设定了一个变量,即:
dupmc=duplicatemovieclip("mymc","mymc"+i,10+i)
trace(dupmc)//测试用
输入undefined,而换成attachmovie就可以一般输入了
以是我选择了attachmovie,但说其实话,attachmovie也不是甚么好鸟,MC一年夜,就会提早进度,以是这是个成绩,接待配合切磋,我就来举一反三。
效果浏览 源码下载
第二部分:分歧坐标点的笔墨散射
方针:笔墨呈一种空间放射状散射出来,其实不断轮回,外加通明度,缩放比例静态调剂塑造平面感,空间感。
要点:空间感和节拍感(举措实行有距离,逐一呈现并顺次放射)
观点了解:MC外部工夫轴的坐标系是制造空间感最好的坐标系,任何点不管在在哪一个象限内,用坐标值乘
以一个递增的正变量,都能够到达放射的目标。
起首,得分明主工夫轴和MC外部工夫轴的坐标不同——————推出MC外部工夫轴坐标特性:就是一个直角坐标系,中央为原点,分为四个象限,这恰是我们所要的坐标系,由于我们要放射,坐标值的偏移应当有正有负,而在舞台的工夫轴,画面只能显现_x>=0&&_y>=0的地区,是个不容易操纵的坐标系。上面来举个例子申明MC外部工夫轴的坐标系是制造空间感最好的坐标系。
以一个公式开首(在思想中画出高中数学的直角坐标系):
mymc._x=a*c
mymc._y=b*c
个中,a,b是坐标系中随机的一个点,它的x坐标为a,y坐标为b,c是一个递增值。
那如今推算下是否是不管该点在哪一个象限内,都能够到达放射的目标呢?
在第一象限:
a>0,b>0,c递增———X坐标不休增添,同时Y坐标也不休增添———放射
在第二象限:
a<0,b>0,c递增———X坐标不休递加,同时Y坐标不休增添———放射
在第三象限:
a<0,b<0,C递增———X坐标不休递加,同时Y坐标也不休递加———放射
在第四象限:
a>0,b<0,c递增———X坐标不休增添,同时Y坐标不休递加———放射
思绪:
起首,在限制局限内(最好小一点,为他的散射留出更多空间,如许会以为字从很深的中央飘来,
以下我限制的是-10——9),为复制的MC设定一个随机地位,这就相称于我下面所举例子中的a和b,他们
实际上是个坐标初值。
然后,要到达放射效果,还必要一个递增的正变量,即c,
以是我打了个字,转换成了MC,再次转换,定名为mymc,并延伸至第3祯,新建一AS层。
为了让要呈现的器材顺次呈现(既能够表现节拍感,又能够避免笔墨堆叠征象),我选择祯轮回的编程体例。
第一祯:设一些要用到的变量初值
mymc._alpha=0;
i=1;
numOfText=20;
minOfZ=1;
maxOfZ=120;
第二祯:主程序
functionrandrange(min,max){
varrandomnum=Math.floor(Math.random()*(max-min+1))+min
returnrandomnum
}//自界说函数,取两数之间的随机数
duplicateMovieClip("mymc",i,i);
this.x=randrange(-11,9);
this.y=randrange(-10,9)//我选择的初始坐标局限是-10到9
this.z=random(maxOfZ)+1;//1——120之间的整数
this.dz=-2;
this.gotoAndStop(random(this._totalframes)+1);
this.onEnterFrame=function(){
this.z+=this.dz;//做减速活动
if(this.z<minOfZ){
this.x=randrange(-11,9);
this.y=randrange(-10,9)//这里的this也能够改成this
this.z=maxOfZ;//this.z<minOfZindex时,也就是MC抵达极限通明度,X,Y,比例
时,此时他已超越了舞台,要不中断播放,必要从头设定他的初值
}
this.pers=600/this.z;//因为每次减2,以是this.z最小值为2,由于再减2就为0了,小于1
this._x=this.x*this.pers;
this._y=this.y*this.pers;//this.pers会越渐渐递增
this._xscale=this._yscale=this.pers;
this._alpha=1000/this.z;//这里的1000你也能够改,不外别太小
};
第三祯:前提判别
i++;
if(i>=numOfText){
stop();//停在第二祯
}else{
gotoAndPlay(_currentframe-1);
}
特地提一下,我们要的c就是代码中的this.pers=600/this.z,他是个递增函数,且恒正。
很复杂吧,测试下,思索下,大概你会比我想到的更多。
效果浏览 源码下载
第三部分:XML把持散射内容
方针:
我们先前散射出来的内容是流动的,在典范里前不久看到一篇帖子,说怎样用XML把持显现内容,以是特来先容。
思绪:
复杂的XML载进
步骤:
1,把第二部分中包括三祯的MC删除,重修一个MC,实例名为mymc,在外部拉一静态文本框,实例名为mytxt,变量名为content,这里要注重,这也就是我起先呈现BUG的关头点地点,必定要设“嵌进字体”,把a-z,A-Z,0-9都嵌进出来,至于缘故原由,蓝紫光注释得很分明。
2,在MYMC外部工夫轴加举措,我们荏苒接纳祯轮回体例酿成
第一祯:界说初始变量,载进XML文件并取节点值
stop();
mymc._alpha=0;
i=1;
numOfText=20;
minOfZ=1;
maxOfZ=120;
varmyxml=newXML()
myxml.ignoreWhite=true
myxml.onLoad=function(suc){
if(suc){
gotoAndPlay(2);
mylist=this.firstChild.childNodes
}
}
myxml.load("myxml.xml")
第二祯:主程序
functionrandrange(min,max){
varrandomnum=Math.floor(Math.random()*(max-min+1))+min
returnrandomnum
}//自界说函数,取两数之间的随机数
duplicateMovieClip("mymc",i,10+i);
this.x=randrange(-11,9);
this.y=randrange(-10,9)
this.z=random(maxOfZ)+1;//1——120之间的整数
this.dz=-4;
this.mytxt.text=mylist.attributes.content
this.onEnterFrame=function(){
this.z+=this.dz;
if(this.z<minOfZ){
this.x=randrange(-11,9);
this.y=randrange(-10,9)//这里的this也能够改成this
this.z=maxOfZ;//this.z<minOfZindex时,也就是MC抵达极限通明度,X,Y,比例
时,此时他已超越了舞台,要不中断播放,必要从头设定他的初值
}
this.pers=600/this.z;//因为每次减2,以是this.z最小值为2,由于再减2就为0了,小于1
this._x=this.x*this.pers;
this._y=this.y*this.pers;//this.pers会越渐渐递增
this._xscale=this._yscale=this.pers;
this._alpha=1000/this.z;//这里的1000你也能够改,不外别太小
第三祯:前提判别
i++;
if(i>=mylist.length){
stop();
}else{
gotoAndPlay(_currentframe-1);
}
注重点:载进提早成绩办理计划
第一祯代码我为何要加个stop();,然后经由过程前提判别myxml.onLoad实行gotoAndPlay(2);?
仍是一个载进提早成绩,参考我的一篇帖子,和loadmovie差未几,假如我不加个STOP,影片就会从1到3毫无停滞地播放,因为XML载进的提早性,在XML文件还没载进终了之前(通常为一轮,从1到3播放终了一遍的工夫)所实行的程序内里基本没法获得节点,则mylist也将是NaN,那末紧跟的第二祯内里this.mytxt.text=mylist.attributes.content取不到值,文本内容会是undefined,也就是说不按我那样弄的话的间接成果将是所载进的MC中有一个文本内容为undefined。
浏览地点:因为有XML,没法浏览
源码下载
后续:我只是以笔墨情势详细解说了散射殊效,你能够把笔墨换成图片并用XML载进,鼠标把持空间挪动,等等,必要我们配合往想。
此外,还支持α透明功能,能够设计人员在Flash视频中对诸如文本、矢量图像以及其它Flash元素等进行整合。 |
|