flash特效原理:螺旋效果 (2)
2010-01-18 15:03
465 查看
经过上面的测试,现在对原先程序进行一些改造可以创建出不错的效果,你会发现每次改动一些参数很多有趣的效果就会出现了。现在我们尝试做一个调节工具对他们的半径,高度,圈数,视角进行创造。这次会主要借助到flash里面 组件包。Slider 组件来帮助我们完成这一次的尝试。
***过程知道:包括Slider 组件的使用,RadioButton 组件使用,旋转rotationY 的使用。
首先创建一下列组件,包括四个Slider组件,初始化设置他们的初始值和初始化参数,通过改变这些值让参数发生更改,这些参数改变会让原本运行的螺旋效果进行改变,组合非常丰富。效果会让人产生很多惊喜。不妨自己动手也创造出一个来测试。
通过去书写这个程序的时候,依旧发现对深度管理的办法总存在一些问题。
如果细心发现 总是觉得存在一定差异,并没有主流flash 3d 引擎出色。这些不足也折射出cs4的功能还需要进行改造。特别在运算的能力上
flash player 依旧需要改进。在未来一些预感当中,对3d引擎概念,粒子引擎,物理引擎的 这些概念 会加入到flash 元素当中。 对创造flash 的内容会变得更加轻松和有趣。你,也可以尝试一下,只要你有这份兴趣。相信自己!心动不如行动,Go on。
代码清单:其中new photo() 对象是通过库链接的出来的。
***过程知道:包括Slider 组件的使用,RadioButton 组件使用,旋转rotationY 的使用。
首先创建一下列组件,包括四个Slider组件,初始化设置他们的初始值和初始化参数,通过改变这些值让参数发生更改,这些参数改变会让原本运行的螺旋效果进行改变,组合非常丰富。效果会让人产生很多惊喜。不妨自己动手也创造出一个来测试。
通过去书写这个程序的时候,依旧发现对深度管理的办法总存在一些问题。
如果细心发现 总是觉得存在一定差异,并没有主流flash 3d 引擎出色。这些不足也折射出cs4的功能还需要进行改造。特别在运算的能力上
flash player 依旧需要改进。在未来一些预感当中,对3d引擎概念,粒子引擎,物理引擎的 这些概念 会加入到flash 元素当中。 对创造flash 的内容会变得更加轻松和有趣。你,也可以尝试一下,只要你有这份兴趣。相信自己!心动不如行动,Go on。
代码清单:其中new photo() 对象是通过库链接的出来的。
package { import flash.display.MovieClip; import flash.events.*; import flash.geom.PerspectiveProjection; import fl.controls.Slider; import fl.events.SliderEvent; import fl.controls.RadioButton; import fl.controls.RadioButtonGroup; public class Main extends MovieClip { private var num:int=50;//一共有多少个螺旋点 private var numOfRotations:int=3;//圈数 private var anglePer:Number = ((Math.PI*2) *numOfRotations) / num; private var R:int=400;//半径 private var h:int=0;//高度 private var contain:MovieClip=new MovieClip();//容器 private var list:Array=new Array();//用于管理图片的 private var type:String="rotationY";//选择类型 public function Main() { init(); creat3D(); } //初始化组件和设备 private function init():void { root.transform.perspectiveProjection.fieldOfView=100;//初始化透视角度 addChild(contain); contain.x=stage.stageWidth/2-600; contain.y=stage.stageHeight/2-800; contain.z=1000; //调整角度 var hd_angle:Slider=new Slider(); hd_angle.name="hd_angle"; hd_angle.addEventListener(SliderEvent.CHANGE,changeValue); addChild(hd_angle); hd_angle.move(523,100); hd_angle.width=200; setSlider(hd_angle,{snap:1,interval:10,min:1,max:20,value:1}); //调节半径 var hd_R:Slider=new Slider(); hd_R.addEventListener(SliderEvent.CHANGE,changeValue); hd_R.name="hd_R"; addChild(hd_R); hd_R.move(523,170); hd_R.width=200; setSlider(hd_R,{snap:1,interval:10,min:1,max:600,value:1}); //调节高度 var hd_height:Slider=new Slider(); hd_height.addEventListener(SliderEvent.CHANGE,changeValue); hd_height.name="hd_height"; addChild(hd_height); hd_height.move(523,220); hd_height.width=200; setSlider(hd_height,{snap:1,interval:10,min:1,max:80,value:1}); //调整视角 var hd_perspective:Slider=new Slider(); hd_perspective.addEventListener(SliderEvent.CHANGE,changeValue); hd_perspective.name="hd_perspective"; addChild(hd_perspective); hd_perspective.move(523,270); hd_perspective.width=200; setSlider(hd_perspective,{snap:10,interval:10,min:1,max:179,value:100}); //选择旋转角度 var ground:RadioButtonGroup=new RadioButtonGroup("rotation"); var ridio1:RadioButton=new RadioButton(); var ridio2:RadioButton=new RadioButton(); addChild(ridio1); addChild(ridio2); ridio1.move(550,294); ridio2.move(650,294); ridio1.label="rotationX"; ridio2.label="rotationY"; ridio1.value="rotationX"; ridio2.value="rotationY"; ridio2.selected=true; ground=ridio1.group=ridio2.group; ground.addEventListener(MouseEvent.CLICK, clickHandler); } //设置Slider 的属性 private function setSlider(hslider:Slider,obj:Object):void { hslider.snapInterval=obj.snap; hslider.tickInterval=obj.interval; hslider.minimum=obj.min; hslider.maximum=obj.max; hslider.value=obj.value; } private function changeValue(event:SliderEvent):void { switch (event.currentTarget.name) { case "hd_angle" : numOfRotations=event.value; trace(numOfRotations); h=0; anglePer = ((Math.PI*2) *numOfRotations) / num; for (var i:int=0; i<list.length; i++) { list[i].x=Math.cos(anglePer*i)*R; list[i].z=Math.sin(anglePer*i)*R; list[i].y=h+=30; list[i].rotationY = (-i*anglePer) * (180/Math.PI)+90; } break; case "hd_R" : R=event.value; h=0; for (var i:int=0; i<list.length; i++) { list[i].x=Math.cos(anglePer*i)*R; list[i].z=Math.sin(anglePer*i)*R; list[i].y=h+=30; list[i].rotationY = (-i*anglePer) * (180/Math.PI)+90; } break; case "hd_height" : var temp:int=event.value; h=0; for (var i:int=0; i<list.length; i++) { list[i].x=Math.cos(anglePer*i)*R; list[i].z=Math.sin(anglePer*i)*R; list[i].y=h+=temp; list[i].rotationY = (-i*anglePer) * (180/Math.PI)+90; } break; case "hd_perspective" : var tempangle:int=event.value; root.transform.perspectiveProjection.fieldOfView=tempangle; break; } } //选择旋转角度 private function clickHandler(event:MouseEvent):void { chooseRotationType(event.target.selection.value); } //改变旋转的类型 private function chooseRotationType(types:String):void { switch (types) { case "rotationX" : type="rotationX"; break; case "rotationY" : type="rotationY"; break; } } //创建螺旋效果 private function creat3D():void { for (var i:int=0; i<num; i++) { var image:photo=new photo(); list.push(image); contain.addChild(image); image.x=Math.cos(anglePer*i)*R; image.z=Math.sin(anglePer*i)*R; image.y=h+=30;//每一个螺旋点都递增30 image.rotationY = (-i*anglePer) * (180/Math.PI)+90;//偏移 image.addEventListener(Event.ENTER_FRAME,Run); } } private function Run(event:Event):void { if (type=="rotationY") { contain.rotationY+=0.01; contain.rotationX=0; } else if (type=="rotationX") { contain.rotationX+=0.01; contain.rotationY=0; } sortZ(); } private function sortZ():void { list.sortOn("z",Array.DESCENDING|Array.NUMERIC); for (var i:int=0; i<list.length; i++) { var myimage:photo=list[i]; contain.setChildIndex(myimage,i); } } } }
相关文章推荐
- flash特效原理:螺旋效果
- flash特效原理:螺旋效果 (3)
- flash特效原理:螺旋效果 (3)
- flash特效原理:螺旋效果
- flash特效原理:螺旋效果 (2)
- flash特效原理:倒影效果
- Flash 特效原理:震动效果(2)
- flash特效原理:图片滑动放大效果(3)
- flash特效原理:CoverFlow 效果
- flash特效原理:倒影效果
- Flash 特效原理:震动效果(2)
- flash特效原理:图片滑动放大效果(3)
- flash特效原理:CoverFlow 效果
- flash特效原理:图片滑动放大效果
- flash特效原理:图片滑动放大效果
- flash特效原理:CoverFlow 效果(2)
- flash特效原理:CoverFlow 效果(2)
- Flash 特效原理:震动效果
- flash特效原理:图片滑动放大效果(2)
- Flash 特效原理:震动效果