1、 首先,将你的数码相机固定在三脚架上,然后沿顺时针方向水平转动相机,从不同的角度拍下周围的所有景物,得到一组连续的照片。这里要注意的一点是,相机每水平转动一个角度拍下的照片,必须与前一张照片有20%左右的重合。 照片拍完后,将它们输入到电脑中,然后打开三维全景照片制作软件,将这组照片依次进行衔接合成。 全景图左右移动制作方法: 1.先准备一张风景图片,图片尺寸和舞台相等或略大均可: 2. 将你要用的图片导入到这个影片剪辑的舞台。导入后让图片右边界的中点放在影片剪辑舞台中心的“+”字线上. 3. 选中这张图片,按下“Ctrl”键的同时用鼠标向右拉,就可再复制出来一张,将复制出来
2、的这一张图片拉到右边,这样就有两张同样的图片了 4. 选中复制出来的这张图片,点击(修改)菜单,选择“变形”项的下级菜单“水平反转”。将水平反转后的这张图片的左边界放在影片剪辑舞台中心“+”字线上。两张图片对齐。再建立一个新影片剪辑,叫“图片二”。 5. 将“图片一”的影片剪辑从库里拉入两次到“图片二”的影片剪辑中,把拉入的两个图片并排放好,注意两图的交界线一定放在正中间的小“+”字线上。 6. 现在我们回到主场景,把“图片二”影片剪辑拉入主场景舞台,在(实例名称)框中填入“m”(在图片的实例名称框中输入实例名 m ,这点很重要!)。点击第三帧,按“F5”插入普通帧,使动画共三个帧。
3、7添加一个新图层。在新层中按两次“F7”添加两个空白关键帧。第一帧是系统默认关键帧,现在共三个关键帧。鼠标右击第一个关键帧,在弹出的对话框中选择“动作”,输入如下代码:b = 5; 鼠标右击第二关键帧,在弹出的对话框中选择“动作”,输入如下代码: x = m._x; xb = getProperty(m, _width) / 2; x = x - b; if (x < 0) { x = x + xb; } // end if if (xb < x) { x = x - xb; } // end if m._x = x; 再鼠标右击第三关键帧,在弹出的对
4、话框中选择“动作”,输入如下代码: gotoAndPlay(2) 上面我作的通过按钮还会倒转方向运动,怎么实现的?添加一个按钮。按钮的制作这里就不说了,可以在公用库里拿一个用。建一个图层,将按钮放在你想放的地方,鼠标右击按钮,在弹出的对话框中选择“动作”,输入如下代码: on (release) { b = -b; } 你还可以自己设计出新的来。比如你输入按钮代码时选择“RollOver” on (RollOver){ b = -b } “RollOver”就是鼠标经过的意思,这样就不用点击按钮,每当鼠标指向按钮时,图片就反向运动。 你还可以改变 b 的值
5、来改变移动速度,如果你将第一帧代码改为“b = 3”每次移动 3 个像素,不就慢多了。你也可以用两个按钮,给向左移动按钮输入代码“b = -5”,给向右移动按钮输入代码“b = 5”,这样两个按钮就给分别控制左右移动。 或者安排多个按钮,让有的向左移动,有的向右移动,有的快速移动,有的慢速移动。这些都根据你自己喜欢决定了。 2. 三维环视效果,前景和背景分离的效果 1、首先找一张云层的图片,要大一点的,可以拼接为环视图片的最好。 2、找一张风景的环视图片,然后将云层或者天空部分去掉,变成透明的,存为png透明格式。 3、在主场景第一层第一帧中建立影片剪辑,实例名称为:bg_m
6、c,在bg_mc下创建影片剪辑实例:bg,进入bg编辑,导入刚刚找到的云层图片。对齐坐标为0,0; 4、在主场景第二层第一帧中建立影片剪辑,实例名称为:img_mc,在img_mc下创建影片剪辑实例:img,进入img编辑,导入刚刚处理过的风景图片。对齐坐标为0,0; 5、在主场景第三层第一帧中加入以下AS代码: stop(); Stage.showMenu = false; Stage.scaleMode = "noScale"; fscommand(allowscale, true); img_mc.img.duplicateMovieClip("img1", 2);
7、//复制前景; bg_mc.bg.duplicateMovieClip("bg1", 2);//复制云层北京; page_width = Stage.width;//设置鼠标感应范围宽度 page_height = Stage.height;//设置鼠标感应范围高度; step = 40;//设置间隔时间; img_mc.img._x = 0;//初始前景坐标位置; img_mc.img1._x = -img_mc.img._width;//初始前景被拼合为环视图 bg_mc.bg._x = 0;//初始背景坐标位置; bg_mc.bg1._x = -bg_mc
8、bg._width;//初始背景被拼和为环视图;
img_mc._y = 0;//初始前景和背景y轴位置;
bg_mc._y = 0;//
_root.onEnterFrame = function() {//根据帧频持续调用函数;
img_width = img_mc._width/2;//设置前景鼠标检测范围;
bg_width = bg_mc._width/2;//设置背景鼠标检测范围;
if (_root._xmouse>0 && _root._xmouse 9、height) {
//判断鼠标是否在场景范围内;
img_mc._x = img_mc._x-(_root._xmouse-page_width/2)/step;//控制前景循环;
bg_mc._x = bg_mc._x-(_root._xmouse-page_width/2)/step*1.3;//控制背景循环,速度比前景快1.3倍;
if (img_mc._x<-(img_width-page_width)) {//以下几个if循环为检测是否超出范围;
img_mc._x = page_width;
}
if (img_mc._x>page_width) { 10、
img_mc._x = page_width-img_width;
}
if (bg_mc._x<-(bg_width-page_width)) {
bg_mc._x = page_width;
}
if (bg_mc._x>page_width) {
bg_mc._x = page_width-bg_width;
}
}
};
ImageLoad.as 图片装载类
ImageView.as 图片控制类
ImagePano.as 图片全景展示类
难点是第三个,如何表现出鱼眼变形效果,我使用了Displacement 11、MapFilter 位图滤镜;
DisplacementMapFilter 类使用指定的 BitmapData 对象(称为置换图图像)的像素值执行对象置换。 您可以使用此滤镜将扭曲或斑点效果应用于从 DisplayObject 类中继承的任何对象,例如 MovieClip、SimpleButton、TextField 和 Video 对象,以及 BitmapData 对象。
滤镜的具体使用取决于要应用滤镜的对象:
若要将滤镜应用于显示对象,请使用显示对象的 filters 属性。 设置对象的 filters 属性不会修改相应的对象,而清除 filters 属性可以删除相应的 12、滤镜。
若要对 BitmapData 对象应用滤镜,请使用 BitmapData.applyFilter() 方法。 对 BitmapData 对象调用 applyFilter() 会取得源 BitmapData 对象和滤镜对象,并生成一个过滤后的图像。
如果对显示对象应用滤镜,则该显示对象的 cacheAsBitmap 属性值将设置为 true。 如果清除所有滤镜,将恢复 cacheAsBitmap 的原始值。
此滤镜使用以下公式:
dstPixel[x, y] = srcPixel[x + ((componentX(x, y) - 128) * scaleX) / 256, y 13、 + ((componentY(x, y) - 128) *scaleY) / 256)
其中,componentX(x, y) 从 mapBitmap 属性获得 (x - mapPoint.x ,y - mapPoint.y) 处的 componentX 属性颜色值。
滤镜使用的映射图像会进行缩放,以匹配舞台缩放比例。 当对象自身呈一定的比例时,它不会进行缩放。
此滤镜支持舞台缩放。 但不支持常规缩放、旋转和倾斜。 如果对象本身进行了缩放(如果将 scaleX 和 scaleY 属性设置为除 1.0 以外的其它值),滤镜效果将不进行缩放。只有用户在舞台上进行放大时它才会缩放。
一个S 14、ample;
package {
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.display.BitmapDataChannel;
import flash.display.GradientType;
import flash.display.SpreadMethod;
import flash.display.Sprite;
import flash.filters.BitmapFilter;
im 15、port flash.filters.DisplacementMapFilter;
import flash.filters.DisplacementMapFilterMode;
import flash.geom.Matrix;
import flash.geom.Point;
import flash.text.TextField;
public class DisplacementMapFilterExample extends Sprite {
private var bgColor:uint = 0 16、xFFCC00;
private var size:uint = 200;
private var offset:uint = 90;
private var labelText:String = "Watch the text bend with the displacement map";
public function DisplacementMapFilterExample() {
draw();
createLabel();
cre 17、ateFilter();
}
private function createFilter():void {
var filter:BitmapFilter = getBitmapFilter();
filters = new Array(filter);
}
private function getBitmapFilter():BitmapFilter {
var mapBitmap:BitmapData = createBitmapDa 18、ta();
var mapPoint:Point = new Point(0, 0);
var channels:uint = BitmapDataChannel.RED;
var componentX:uint = channels;
var componentY:uint = channels;
var scaleX:Number = 0.5;
var scaleY:Numbe 19、r = -30;
var mode:String = DisplacementMapFilterMode.CLAMP;
var color:uint = 0;
var alpha:Number = 0;
return new DisplacementMapFilter(mapBitmap,
mapPoint,
componentX, 20、
componentY,
scaleX,
scaleY,
mode,
color,
21、 alpha);
}
private function draw():void {
var matrix:Matrix = new Matrix();
matrix.createGradientBox(size, size);
graphics.beginGradientFill(GradientType.RADIAL,
[0xFF0000, 0x0000FF],
22、
[100, 100],
[55, 200],
matrix,
SpreadMethod.PAD);
graphics.drawRect(0, 0, size, size);
}
private function c 23、reateBitmapData():BitmapData {
var bitmapData:BitmapData = new BitmapData(size, size, true, bgColor);
bitmapData.draw(this, new Matrix());
var bitmap:Bitmap = new Bitmap(bitmapData);
bitmap.x = size;
addChild(bitmap);
return bitmapData;
}
private function createLabel():void {
var tf:TextField = new TextField();
tf.text = labelText;
tf.y = offset;
tf.width = size;
addChild(tf);
}
}
}






