flash播放器:Flash as教程:文字散射效果

  本文举例源代码或素材下载

  提示:这是个很妙效果说这句话是为了引起你阅读兴趣提供思路为主以文字为例更好效果如把文字换成图片散射依照这个思路应当可以很完美实现同时第 3部分BUG已经清除所以我对本文章作下修改谢谢各位帮忙

  第部分:同坐标点散射类似烟花效果

  目标:大量文字从个原点向 4周散射

  “大量”———————很显然要用到duplicatemovieclip或者attachmovie这里我选择attachmovie至于

  什么原因以下我将阐述

  “散射”——————x,y偏移结合Math.random就是随机偏移.随机数取值要有正且有负散射是 4面 8方XY偏移

  “个原点”————这个效果原理理解关键点就在这里个原点换句话说就是将复制出来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
function randrange(min,max){
    var randomnum=Math.floor(Math.random*(max-min+1))+min
    randomnum
}//自定义取两数的间随机数
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._xthis.speedx
    this._ythis.speedy
     (this._x < LEFT || this._x > RIGHT || this._y < TOP || this._y > BOTTOM) {
    this.removeMovieClip;
   }//end
}
}


  ok,代码结束以下我谈谈我为什么不用duplicatemovieclip而用attachmovie

  我们都知道把duplicatemovieclip或attachmovie前面加个变量很方便调整MC属性书写也简单但实

  现方式有两种

  起初我是用duplicatemovieclip前面设定了个变量即:

  dupmc=duplicatemovieclip("mymc","mymc"+i,10+i)

  trace(dupmc)//测试用

  输出und而换成attachmovie就能正常输出了

  所以我选择了attachmovie但说实在话attachmovie也不是什么好鸟MC就会延迟进度所以这是个问题欢迎共同探讨我就来抛砖引玉

  效果欣赏  源码下载

  第 2部分:区别坐标点文字散射

  目标:文字呈种空间放射状散射出来并不断循环外加透明度缩放比例动态调整塑造立体感空间感

  要点:空间感和节奏感(动作执行有间隔逐个出现并依次放射)

  概念理解:MC内部时间轴坐标系是制作空间感最好坐标系任何点无论在在哪个象限内用坐标值乘

  以个递增正变量都可以达到放射

  首先得明白主时间轴和MC内部时间轴坐标差别——————推出MC内部时间轴坐标特点:就是个直角坐标系中心为原点分为 4个象限这正是我们所要坐标系我们要放射坐标值偏移应该有正有负而在舞台时间轴画面只能显示_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坐标也不断增加———放射

  在第 2象限:

  a<0,b>0,c递增———X坐标不断递减同时Y坐标不断增加———放射

  在第 3象限:

  a<0,b<0,C递增———X坐标不断递减同时Y坐标也不断递减———放射

  在第 4象限:

  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;


  第 2祯:主

function randrange(min,max){
    var randomnum=Math.floor(Math.random*(max-min+1))+min
    randomnum
}//自定义取两数的间随机数
duplicateMovieClip("mymc", i, i);
this[i].x = randrange(-11,9);
this[i].y = randrange(-10,9)//我选择坐标范围是-10到9
this[i].z = random(maxOfZ)+1;//1——120的间整数
this[i].dz = -2;
this[i].gotoAndStop(random(this[i]._totalframes)+1);
this[i].onEnterFrame = function {
    this.z this.dz;//做加速运动
    (this.z       this.x = randrange(-11,9);
              this.y = randrange(-10,9)//这里this也可以改为this[i]
       this.z = maxOfZ;//this.z
  
此时他已经超出了舞台要不间断播放需要重新设定他初值
    }
    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你也可以改不过别太小
};


  第 3祯:条件判断

i;
(i>=numOfText) {
    stop;//停在第 2祯
}{
    gotoAndPlay(_currentframe-1);
}


  顺便提我们要c就是代码中this.pers=600/this.z他是个递增且恒正

  很简单吧测试下研究下也许你会比我想到更多

  效果欣赏  源码下载

  第 3部分:XML控制散射内容

  目标:

  我们先前散射出来内容是固定在经典里前不久看到篇帖子说如何用XML控制显示内容所以特来介绍

  思路:

  简单XML载入

  步骤:

  1把第 2部分中包含 3祯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;
var myxml= XML
myxml.ignoreWhite=true
myxml.onLoad=function(suc){
    (suc){
    gotoAndPlay(2);
       mylist=this.firstChild.childNodes
       }
    }
myxml.load("myxml.xml")


  第 2祯:主

function randrange(min,max){
    var randomnum=Math.floor(Math.random*(max-min+1))+min
    randomnum
}//自定义取两数的间随机数
duplicateMovieClip("mymc", i, 10+i);
this[i].x = randrange(-11,9);
this[i].y = randrange(-10,9)
this[i].z = random(maxOfZ)+1;//1——120的间整数
this[i].dz = -4;
this[i].mytxt.text=mylist[i].attributes.content
this[i].onEnterFrame = function {
    this.z this.dz;
    (this.z       this.x = randrange(-11,9);
    this.y = randrange(-10,9)//这里this也可以改为this[i]
       this.z = maxOfZ;//this.z
  
此时他已经超出了舞台要不间断播放需要重新设定他初值
    }
    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你也可以改不过别太小




  第 3祯:条件判断

i;
(i>=mylist.length) {
    stop;
}{
    gotoAndPlay(_currentframe-1);
}


  注意点:载入延迟问题解决方案

  第祯代码我为什么要加个stop;然后通过条件判断myxml.onLoad执行gotoAndPlay(2);?

  还是个载入延迟问题参考 我篇帖子 和loadmovie差不多如果我不加个STOP影片就会从1到3毫无障碍地播放由于XML载入延迟性在XML文件还没载入完毕的前(般是从1到3播放完毕时间)所执行里面根本无法取得节点则mylist也将是NaN那么紧跟第 2祯里面this[i].mytxt.text=mylist[i].attributes.content取不到值文本内容会是und也就是说不按我那样弄直接后果将是所载入MC中有个文本内容为und

  欣赏地址:由于有XML无法欣赏

  后续:我只是以文字形式具体讲解了散射特效你可以把文字换成图片并用XML载入鼠标控制空间移动等等需要我们共同去想



Tags:  flashplayer flash播放器

延伸阅读

最新评论

发表评论