flash制作可以聚集的飞扬雪花,flash制作可以聚集的飞扬雪花相关文章
您的位置:本站首页 - 源码软件 - 图形图像 - Flash - 动画制作实例
 

flash制作可以聚集的飞扬雪花

  •   最近看到不少的雪花特效,自己也有些许研究,不敢独享,拿来大家一起讨论一下。

      下面是作品最终效果:


      其实整个过程很简单的,大概的思想就是找一个雪花的图片,然后把它封装成一个MC元件,再加入AS语句就可以啦。

      好,下面就开始动手了:

      新建一个snow.fla文件
      设置其舞台大小为:800*560
      背景为黑色
      先准备一个雪花文件:

      

      把它插入到新建的FLA文件中。

      将雪花拖入到主场景中,放置于舞台外,并封装为snow_mc,别忘记定义其实例名:snow_mc
      加入两行字并封装为merry1_mc,merry2_mc,别忘记定义其实例名(雪花要落到上面)

     在第一帧as编辑区里加入下面的AS语句:

    stop();
    var i;
    //产生60个小雪花
    for (i=1; i<60; i++) {
    //产生新的雪花剪辑元件
    snow_mc.duplicateMovieClip(snow+i+_mc, i);
    //新的雪花的X,Y坐标
    eval(snow+i+_mc)._x = random(800);
    eval(snow+i+_mc)._y = random(560);
    //新的雪花的形变
    scale = random(60)+50;
    //不同的透明度,产生层次感
    eval(snow+i+_mc)._alpha = scale;
    //不同的大小,产生层次感
    eval(snow+i+_mc)._xscale = scale;
    eval(snow+i+_mc)._yscale = scale;
    //加入控制雪花的AS语句
    snow(eval(snow+i+_mc));
    }
    //这个函数是用来产生一个新的雪花
    function createSnow() {
    //深度递加
    i++;
    //产生实例
    snow_mc.duplicateMovieClip(snow+i+_mc, i);
    eval(snow+i+_mc)._x = random(800);
    eval(snow+i+_mc)._y = random(560);
    scale = random(60)+50;
    eval(snow+i+_mc)._alpha = scale;
    eval(snow+i+_mc)._xscale = scale;
    eval(snow+i+_mc)._yscale = scale;
    snow(eval(snow+i+_mc));
    }
    //加入控制雪花的AS语句的函数
    function snow(snow_mc) {
    snow_mc.onLoad = function() {
    //舞台大小
    stage_x = 800;
    stage_y = 560;
    //用来判断是否降落
    this.moving = true;
    //判断是否接触到字体剪辑
    touch = false;
    //风向和风力
    windx = (_xmouse-stage_x/2)/100;
    };
    //风向和风力随鼠标的移动而改变
    snow_mc.onMouseMove = function() {
    windx = (_xmouse-stage_x/2)/100;
    updateAfterEvent();
    };
    snow_mc.onEnterFrame = function() {
    //判断moving
    if (this.moving) {
    //随机数用来产生摇摆效果
    s = random(2);
    //雪花下落
    this._y += 10;
    if (s == 0) {
    this._x += 5;
    } else if (s == 1) {
    this._x -= 5;
    }
    //加上风力
    this._x += windx;
    //超出舞台就初始化
    if (this._y>stage_y || this._x<0) {
    this._y = 0;
    this._x = random(stage_x);
    }
    //产生旋转效果
    this._rotation = random(180);
    //未接触MERRY1_MC就执行
    if (!touch && this.hitTest(merry1_mc)) {
    //产生随机数用以判断是否应该停止下落
    stopOrNot = random(4);
    //如果随机数为1,则停止下落
    if (stopOrNot == 1) {
    //this._y += random(5);
    //使moving为false,停止下落
    this.moving = false;
    //因为接触了MERRY1_MC,使touch为true
    touch = true;
    //因为停止下落,所以删除onEnterFrame
    delete this.onEnterFrame;
    //因为停止下落,所以重新再产生一个小雪花
    createSnow();
    }
    }
    //这里和上面的一样,只不过减少了功能
    if (this.hitTest(merry2_mc)) {
    stopOrNot = random(2);
    if (stopOrNot == 1) {
    //this._y += random(5);
    this.moving = false;
    delete this.onEnterFrame;
    createSnow();
    }
    }
    }
    };
    }

      好啦,ctrl+enter就可以测试了,如果可以的话,还可以加入好看一点儿的背景,那样效果就更好了。

 
 
 
版权所有华夏IT站 by 中国·上海 沪ICP备06018754号
Copyright(C) 2006-2007 www.zzuni.com All Rights Reserved
Processed in 0.125 second(s) -