每天学一点flash(59) 下雪效果
2009-10-05 22:27
295 查看
这天一个人走去爬山,国庆节有点闷。不过,爬山却会让人感觉全身轻松起来,没有压力的享受与大自然交流的快乐时光。晚上,就随便写了一个下雪的效果。虽然这种效果已经很落后,不过当年学flash的时候,这个编程却帮了懂了很多。
无聊之中,突然想起了志摩哪首雪花的快乐。却无意中,勾起那段回忆的故事。徐志摩,林徽因 ,梁思成 金岳霖之间故事。
好,闲话不多说。
雪花***原理:
创建一个影片剪辑Snow,这个Snow就是关键雪花。***的时候,采用一个灰色的球,然后通过滤镜模糊化,改变光度这样的方式就可以***一个小球出来。通过时间器让雪花产生不同时间间隔,并且让雪花自动下落一个高度就进行删除,否则内存会开销很大,产生卡的现象。
接下来,还需要准备一张背景图。最好还是与雪有关系的。
完成准备工作,就可以开始写代码。
设计文档类:main.as ,以及雪花Snow.as 类这两个类就可以完成基本工作。
Snow写法
时间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);//删除事件
无聊之中,突然想起了志摩哪首雪花的快乐。却无意中,勾起那段回忆的故事。徐志摩,林徽因 ,梁思成 金岳霖之间故事。
好,闲话不多说。
雪花***原理:
创建一个影片剪辑Snow,这个Snow就是关键雪花。***的时候,采用一个灰色的球,然后通过滤镜模糊化,改变光度这样的方式就可以***一个小球出来。通过时间器让雪花产生不同时间间隔,并且让雪花自动下落一个高度就进行删除,否则内存会开销很大,产生卡的现象。
接下来,还需要准备一张背景图。最好还是与雪有关系的。
完成准备工作,就可以开始写代码。
设计文档类:main.as ,以及雪花Snow.as 类这两个类就可以完成基本工作。
Snow写法
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);//删除事件
相关文章推荐
- 每天学一点flash(59) 下雪效果
- 每天学一点flash (32) as 3.0 结合xml 制作走马 灯效果
- 每天学一点flash (32) as 3.0 结合xml 制作走马 灯效果
- 每天学一点flash (32) as 3.0 结合xml 制作走马 灯效果
- 每天学一点flash(84) 翻转(2)
- 每天学一点flash(83) 数组中过滤 (2)
- 每天学一点flash(65)cs4的旋转属性练习
- 每天学一点Flash(49) 三角函数在Flash中的应用
- 每天学一点flash(50) 反余切的应用
- 每天学一点flash(51) 工厂模式
- 每天学一点flash(52) 翻页组件算法(2)
- 每天学一点flash(63) 读取xml后的简单分页处理
- 每天学一点flash(75) ToolTip 提示
- 每天学一点flash(57)简单抽奖方式实现
- 每天学一点flash(30) new Timer的函数 学习笔记
- 每天学一点flash(40) 制作走马灯四
- 每天学一点flash(42) 参数方程在flash中的应用
- 每天学一点flash(62) 类分类
- 每天学一点flash(28) as3.0 自定义类 笔记(2)
- 每天学一点flash(68) 新闻列表制作