您的位置:首页 > 其它

Flash 特效原理:图片平面墙

2010-02-11 20:54 393 查看




ok ,来到9点的时候,刚刚好吃饱饭。见到这种网上的相册的时候,我对它的分布产生了很多兴趣。它的分布并不是很难,因为你可以想象一下,其实它看起来更加像二维阵列,或者很多效果我们都可以利用二维阵列对其进行分布。而这种分布,可以录入flash当中一个很重要的技术。要产生透视的效果,只是刚刚对容器偏移了一个rotationY角度而已。



我们做一个实验:采用两个循环进行复制



0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0



可以采用二维循环:

for(i)

for(j)

{



物体.x=物体.width*j;

物体.y=物体.height*j;

}







复制完成了这种二维效果的时候,图片按横竖分布。然后我们需要加一点角度,让装载图片的容器对象进行角度偏移。这样就能够看出一个偏移后的效果,而呈现出一种透视的角度。这种角度可以进行调节。采用flash cs4能够简单地实现到这种图片分布的效果。

下面为代码清单。



其中我们需要准备一系列宽和高的都相等的图片,并且对最下面的一行进行一个倒影的效果。这个倒影类可以到网上收集一下,在adobe 核心代码库里面有。可以到google code 里面寻找到。

结合到这种简化的效果,你可以对其进行改进,因为个人也在偷懒。所以希望用最简化实现方式呈现出来。让这种效果变得更加容易,其中没

对图片进行交互使用,这些是缺少的。对用户体现大减。好,就写到这里。值得提,flash 分布技术是一种常用的技术。



package 
{

	import flash.display.Sprite;
	import flash.display.MovieClip;
	import flash.events.*;
	import flash.geom.*;
	import flash.display.DisplayObject;
    import flash.display.Bitmap;
	import flash.display.Loader;
	import flash.net.*;
	
	import com.image.Reflect;
	
	public class Main extends Sprite
	{
		private var contain:Sprite=new Sprite();//创建容器
		private var list:Array=new Array();//用于图片管理的数
		private var count:int=0;
		private var imageList:Array=new Array();

		public function Main()
		{
			init();
			init_loadImage();
		}
		
		private function init():void
		{
			addChild(contain);
			contain.x=0;
			contain.y=100;
			contain.z=10;			
			root.transform.perspectiveProjection.fieldOfView=60;//初始化透视角度			
		}
		
		//加载外部图片
		private function init_loadImage():void
		{
			
			addImages("./image/pic1.jpg","./image/pic2.jpg","./image/pic3.jpg","./image/pic4.jpg",
					  "./image/pic5.jpg","./image/pic6.jpg","./image/pic7.jpg","./image/pic8.jpg",
					  "./image/pic9.jpg","./image/pic10.jpg","./image/pic11.jpg","./image/pic12.jpg",
					  "./image/pic13.jpg","./image/pic14.jpg","./image/pic15.jpg","./image/pic16.jpg",
					  "./image/pic17.jpg","./image/pic18.jpg","./image/pic19.jpg","./image/pic20.jpg",
					  "./image/pic21.jpg","./image/pic22.jpg","./image/pic23.jpg","./image/pic24.jpg",
					  "./image/pic25.jpg","./image/pic26.jpg","./image/pic27.jpg","./image/pic28.jpg",
					  "./image/pic29.jpg","./image/pic30.jpg","./image/pic31.jpg","./image/pic32.jpg");			
		}
		
         
		 //创建二维阵列分布4x8
		private function createSprite(array:Array):void
		{
			var k:int=0;
			for (var i:int=0; i<4; i++)
			{
				for (var j:int=0; j<8; j++)
				{
					var myphoto:MovieClip=new MovieClip();
					contain.addChild(myphoto);
					myphoto.addChild(array[k]);
					//list.push(myphoto);
					myphoto.x=myphoto.width*j+10*j;
					 if(i==3)
					{
						var r1:Reflect = new Reflect({mc:myphoto, alpha:30, ratio:80, distance:0, updateTime:-1, reflectionDropoff:0});
					    myphoto.y=myphoto.height*i/2+10*i;
					}
					else
					 {
					
					   myphoto.y=myphoto.height*i+10*i;
					 }
					k++;
				}

			}
			contain.rotationY=-45;//偏移45度
		}
      
	  //添加外部图片,偷懒的做法 
		private function addImages(...args):void
		{
			count=args.length;
			for (var i:int=0; i<args.length; i++)
			{
				var loader:Loader=new Loader();
				loader.contentLoaderInfo.addEventListener(Event.COMPLETE,onComplete);
				loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR,onError);
				loader.load(new URLRequest(args[i]));
			}
		}
		private function onComplete(event:Event):void
		{
			var bitmap:Bitmap=event.currentTarget.content as Bitmap;
			imageList.push(bitmap);
			event.currentTarget.removeEventListener(Event.COMPLETE,onComplete);
			event.currentTarget.removeEventListener(IOErrorEvent.IO_ERROR,onError);
			count--;
			if (count==0)
			{
				createSprite(imageList);
			}

		}
		private function onError(event:Event):void
		{
			throw new Error("路径错误");
		}

	}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: