点击这里给我发消息 点击这里给我发消息
首页 > 行业资讯 > flash>详细内容

打造完美物体空间散射中

添加时间:2010-1-5
    相关阅读: 程序 制作

第二部分:不同坐标点的文字散射

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

要点:空间感和节奏感(动作执行有间隔,逐个出现并依次放射)
概念理解: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;

第二祯:主程序

function randrange(min,max){
       var randomnum=Math.floor(Math.random()*(max-min+1))+min
       return 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;//做加速运动
       if (this.z<minOfZ) {
              this.x = randrange(-11,9);
                            this.y = randrange(-10,9)//这里的this也可以改为this[i]
              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,他是个递增函数,且恒正。

很简单吧,测试下,思考下,也许你会比我想到的更多
效果欣赏  源码下载

本文作者:
咨询热线:020-85648757 85648755 85648616 0755-27912581 客服:020-85648756 0755-27912581 业务传真:020-32579052
广州市网景网络科技有限公司 Copyright◎2003-2008 Veelink.com. All Rights Reserved.
广州商务地址:广东省广州市黄埔大道中203号(海景园区)海景花园C栋501室
= 深圳商务地址:深圳市宝源路华丰宝源大厦606
研发中心:广东广州市天河软件园海景园区 粤ICP备05103322号 工商注册