这天一个人走去爬山,国庆节有点闷。不过,爬山却会让人感觉全身轻松起来,没有压力的享受与大自然交流的快乐时光。晚上,就随便写了一个下雪的效果。虽然这种效果已经很落后,不过当年学flash的时候,这个编程却帮了懂了很多。

jquery雪花飘落效果实现一步接着一步是什么 flash雪花飘落不断教程_flash

 

无聊之中,突然想起了志摩哪首雪花的快乐。却无意中,勾起那段回忆的故事。徐志摩,林徽因 ,梁思成 金岳霖之间故事。

好,闲话不多说。

 

雪花制作原理:

          创建一个影片剪辑Snow,这个Snow就是关键雪花。制作的时候,采用一个灰色的球,然后通过滤镜模糊化,改变光度这样的方式就可以制作一个小球出来。通过时间器让雪花产生不同时间间隔,并且让雪花自动下落一个高度就进行删除,否则内存会开销很大,产生卡的现象。

           接下来,还需要准备一张背景图。最好还是与雪有关系的。

           完成准备工作,就可以开始写代码。

 

设计文档类:main.as ,以及雪花Snow.as 类这两个类就可以完成基本工作。

Snow写法

jquery雪花飘落效果实现一步接着一步是什么 flash雪花飘落不断教程_function_02

 

jquery雪花飘落效果实现一步接着一步是什么 flash雪花飘落不断教程_flash_03

package com.effect
{

	import flash.display.MovieClip;
	import flash.events.*;
	public class Snow extends MovieClip
	{
		public function Snow()
		{

		}
		
	}
}
package 
{

	import flash.display.MovieClip;
	import flash.events.*;
	import flash.utils.Timer;
	import flash.display.Stage;
	import flash.display.DisplayObject;
	import com.effect.Snow;
	public class main extends MovieClip
	{
		private var time:Timer;
		private var speed:int=5;
		private var contain:MovieClip=new MovieClip();//存储雪花容器

		public function main()
		{
			init();
		}
		//初始化时间器
		private function init():void
		{
			addChild(contain);
			time=new Timer(200);
			time.addEventListener(TimerEvent.TIMER,onTimer);
			time.start();
		}
		private function onTimer(event:TimerEvent):void
		{
			creatSnow();
			creatSnow();
			creatSnow();
			creatSnow();
			creatSnow();
		}
		
		//复制雪花
		private function creatSnow():void
		{
			var mysnow:Snow=new Snow();
			contain.addChild(mysnow);
			mysnow.y=0;
			mysnow.x=Math.random()*stage.stageWidth;
			mysnow.scaleX=mysnow.scaleY=Math.random()+0.1;
			mysnow.addEventListener(Event.ENTER_FRAME,Run);
		}
		private function Run(event:Event):void
		{
			var mc:MovieClip=MovieClip(event.currentTarget);
			mc.y+=speed;
			mc.rotation=Math.random()*360;
			if (mc.y>650)
			{
				contain.removeChild(mc);//删除内存中的mc
				mc.removeEventListener(Event.ENTER_FRAME,Run);//删除事件
				mc=null;
			}
		}
	}
}

 

时间Timer使用:

关键的程序,主要使用计数器产生一个产生对象的效果。Timer 每隔200毫秒就会产生一个对象,该对象就会产生一个向下运行的效果。

在init() 方法的时候就构造一个时间器。

 

 

对象运动

我们创建的Snow对象,需要对其进行运行,那么我们采用一个简单的方式就是采用Event.ENTER 这样的事件监听,通过这个事件我们可以每一帧对其进行调用。

这样当我们改变y轴的大小,那么就可以产生一个位移改变了。同样在下落的过程当中,适当改变角度就会产生不同的效果了。

 

 

删除对象 

关于删除的工作,其实不难,不过使用removeChild这个方法的时候,需要注意节点的关系。

在这里采用private var contain:MovieClip=new MovieClip();//存储雪花容器 这种方式存储Snow的对象,

contain.addChilc(mysnow);

 

这样的话,我们就很容易知道节点父级和子级的关系。contain 作为一个父级点,只有通过这个才能进行删除他容器内的节点。

contain.removeChild(mc);//删除内存中的mc

 

同样,对删除后的对象要进行删除事件监听,当不使用Event.ENTER_FRAME事件 的时候,则需要对其事件删除,否则就会出错。

mc.removeEventListener(Event.ENTER_FRAME,Run);//删除事件