发新话题
打印

请教一下关于AS倒影的问题!

请教一下关于AS倒影的问题!

舞台上有一个MC,想给它动态加载一个倒影效果怎么做呢?
我开始的想法是给MC复制一个剪辑,然后调整颜色和透明度,问题是由于MC里的内容比较复杂,为了一个效果在舞台上同时出现双倍的MC会很大降低CPU效率,好象不是很划算吧。
然后就打算尝试用绘图函数里的DROPSHADOW,查了一下帮助文件,发现它没有调整大小的参数啊,也就是投影总是正着的,倒不过来,结果也放弃了。
最后无奈只好DRAW()了,不过每桢都做截图的方法也使CPU的效率降低了很多。
所以请大家帮一下忙啦,有什么好点的方法没???

TOP

我也想知道,顶一下
我的全flash小站http://www.ourme.cn

TOP

mc._yscale = - mc._yscale;
不就是倒过来了吗

TOP

倒过来不是问题,问题是用同样的MC做倒影会很耗内存的,比如主体MC里包括N张PNG,还有N个粒子效果,再复制出一个MC做倒影就是(N+N)*2的运行速度了。哎,难道就没有好点的方法吗?比如给MC做一个镜像什么的???

TOP

mc._y=-mc._yscale;
mc._alpha=50;

TOP

3楼5楼的两位兄弟看来还没有认真分析楼主的话,人家是可以倒过来,用_yscale来倒的话占资源,想另求他法而已.人家DRAW()都懂用了,难道还不懂_yscale能翻转?

随便再顶一下,我也想知道答案

(5楼写的代码是不是有点笔误?)

[ 本帖最后由 ourme 于 2007-3-19 12:17 编辑 ]
我的全flash小站http://www.ourme.cn

TOP

你可以用一个bitmapdata来实现 我来看看
54371309[请发送:flash8会员问题]
正在更新中..070815   http://zszen.com

TOP

复制内容到剪贴板
代码:
import flash.display.BitmapData;
import flash.geom.*;
import com_zszen.spirit.create;
//mc必须是左上角对齐
function mirror(mc, w, h, max) {
if (w == null) {
  var w = mc._width;
}
if (h == null) {
  var h = mc._height;
}
if (max == null) {
  var max = 10;
}
var bd = new BitmapData(w, h, true, 0);
bd.draw(mc);
var path = mc._parent;
var alpha = 80;
var pmc = create.Movie(path, mc._name+"_mirro");
//var pmc = path.createEmptyMovieClip(mc._name+"_mirro", path.getNextHighestDepth());
pmc._x = mc._x;
pmc._y = mc._y+h-1;
var tbg = create.Movie(pmc, "bg");
//var tbg = pmc.createEmptyMovieClip("bg", pmc.getNextHighestDepth());
var ttbg = create.Movie(tbg, "mirror");
//var ttbg = tbg.createEmptyMovieClip("mirror", tbg.getNextHighestDepth());
ttbg.attachBitmap(bd, 1);
tbg._visible = false;
for (var i = 1; i<=max; i++) {
  var m = create.Movie(pmc, "m"+i);
  //var m = pmc.createEmptyMovieClip("m"+i, pmc.getNextHighestDepth());
  var b = new BitmapData(w, h*i/max, true, 0);
  b.draw(tbg);
  m.attachBitmap(b, 1);
  m._yscale = -100;
  m._y = h*(max-i)/max-2;
  m._alpha = alpha*i/max;
  ttbg._y -= h/max;
}
}
onEnterFrame = function () {
mirror(me, 300, 150, 10);
};

附件

shadow.swf (2.43 KB)

2007-3-19 15:31, 下载次数: 319

54371309[请发送:flash8会员问题]
正在更新中..070815   http://zszen.com

TOP

zen爷,附件中出现的问题怎样解决?

附件

新建 BMP 图像.JPG (29.91 KB)

2007-3-20 09:15

新建 BMP 图像.JPG

TOP

现在我对zszen的职业很感兴趣.....到底是做什么职业的才这么有空回答这么多问题呢?
难道是传说中的巨额身家的太子爷?
我的全flash小站http://www.ourme.cn

TOP

TOP

THX!!!

哇想不到有这么多热心人,感动一下!!!
PS:谢谢版主的代码,先学习去啦

TOP

import com_zszen.spirit.create;
请斑竹大人解释下以 zszen命名的包和类吧。。。。没看懂呢!
非淡泊无已明志
非宁静无已至远
qq:9234164

TOP

TOP

9楼同样的问题,   


这个怎么写的?

TOP

顶起  15楼下面的效果很好啊
FLASH Everyday

TOP

我来优化一下我的效果 不用多个位图组合 这样浪费内存
54371309[请发送:flash8会员问题]
正在更新中..070815   http://zszen.com

TOP

大家的技术太好了,我也学习中.........

TOP

复制内容到剪贴板
代码:
import flash.display.BitmapData;
import flash.geom.*;
import com_zszen.spirit.create;
import com_zszen.spirit.draw;
function mirror(mc, w, h, alpha) {
//镜面效果
//mc必须是左上角对齐
if (alpha == null) {
  alpha = 136;
} else {
  alpha = (255-alpha/100*255);
}
if (w == null) {
  var w = mc._width;
}
if (h == null) {
  var h = mc._height;
}
if (max == null) {
  var max = 10;
}
var bd:BitmapData = new BitmapData(w, h, true, 0);
bd.draw(mc);
var pmc = create.Movie(mc._parent, mc._name+"_mirro");
//等同于下面的话
//var pmc = path.createEmptyMovieClip(mc._name+"_mirro", path.getNextHighestDepth());
pmc._x = mc._x;
pmc._y = mc._y+2*h;
var alphabg:MovieClip = create.Movie(pmc, "alphabg");
var m = new Matrix();
m.rotate(90/180*3.14);
m.scale(.1, .1);
alphabg._y -= h;
alphabg.lineStyle();
alphabg.beginGradientFill("linear", [0x0, 0x0], [0, 100], [alpha, 255], m);
draw.box(alphabg, {x:0, y:0}, {x:w, y:h});
alphabg.endFill();
alphabg._visible = false;
var bd2 = new BitmapData(w, h, true, 0);
bd2.draw(alphabg);
bd.copyPixels(bd, bd.rectangle, bd.rectangle.topLeft, bd2, bd2.rectangle.topLeft);
var mir:MovieClip = create.Movie(pmc, "mirror");
mir.attachBitmap(bd, 1);
mir._yscale = -100;
}
onEnterFrame = function () {
mirror(me, me._width+1, 100, 40);
};

附件

shadow.swf (5.74 KB)

2007-6-20 10:13, 下载次数: 191

shadow.zip (21.28 KB)

2007-6-20 10:13, 下载次数: 148

54371309[请发送:flash8会员问题]
正在更新中..070815   http://zszen.com

TOP

代码优化了 不用n个位图来拼了 这样就可以得到任意透明效果

[ 本帖最后由 zszen 于 2007-6-20 15:07 编辑 ]

附件

SpxImage3.jpg (15.14 KB)

2007-6-20 15:07

SpxImage3.jpg

54371309[请发送:flash8会员问题]
正在更新中..070815   http://zszen.com

TOP

为何大家写程序都不写注释的,希望大家写程序时多写注释,这样你容易看得懂,我们更容易看得懂.程序注释也是程序的一部分呀!

TOP

下下来看看

TOP

zszen  控制倒影的透明度和大小是哪段代码?

TOP

介于很多人都不会控制倒影的透明效果
我这里优化了一下 单独把这个mc提出来 你可以直接使用外部的mc来作为透明效果 或是用代码里面提供的 支持设置透明区域的alpha和rotaion
mirror里面的参数第一个必添 剩下的不愿意添就不添 就是附加效果
复制内容到剪贴板
代码:
import flash.display.BitmapData;
import flash.geom.*;
import com_zszen.spirit.create;
import com_zszen.spirit.draw;
function mirror(mc, obj, drawmc) {
//镜面效果
//mc必须是左上角对齐
var w, h, alpha, rotation;
w = obj.width ? obj.width : mc._width;
h = obj.height ? obj.height : mc._height;
alpha = obj.alpha != null ? (255-obj.alpha/100*255) : 128;
rotation = obj.rotation ? obj.rotation : 90;
var bd:BitmapData = new BitmapData(w, h, true, 0);
bd.draw(mc);
var pmc = create.Movie(mc._parent, mc._name+"_mirro");
if (obj.x) {
  pmc._x = obj.x;
}
if (obj.y) {
  pmc._y = obj.y;
}
if (obj.xscale) {
  pmc._xscale = obj.xscale;
}
if (obj.yscale) {
  pmc._yscale = obj.yscale;
}
var bd2 = new BitmapData(w, h, true, 0);
if (drawmc == null) {
  var alphabg:MovieClip = create.Movie(pmc, "alphabg");
  var m = new Matrix();
  m.rotate(rotation/180*3.14);
  m.scale(.1, .08);
  alphabg._y -= h;
  alphabg.lineStyle();
  alphabg.beginGradientFill("linear", [0x0, 0x0], [0, 100], [alpha, 255], m);
  draw.box(alphabg, {x:0, y:0}, {x:w, y:h});
  alphabg.endFill();
  alphabg._visible = false;
  bd2.draw(alphabg);
} else {
  cmc._visible=false
  bd2.draw(drawmc);
}
bd.copyPixels(bd, bd.rectangle, bd.rectangle.topLeft, bd2, bd2.rectangle.topLeft);
var mir:MovieClip = create.Movie(pmc, "mirror");
mir.attachBitmap(bd, 1);
mir._yscale = -100;
return pmc;
}
onEnterFrame = function () {
var mc = mirror(me, {x:me._x, y:me._y+200, width:me._width, height:100, alpha:100}, cmc);
};
54371309[请发送:flash8会员问题]
正在更新中..070815   http://zszen.com

TOP

这样你只要在场景上新建一个mc 对这个mc作透明填充 然后 设置名字 用mirror的第三个属性来加载这个mc就可以了,加载后mc的可见度为false
54371309[请发送:flash8会员问题]
正在更新中..070815   http://zszen.com

TOP

收到,多谢指教

TOP

不错哦,效果真好!
世界好大,却没有我站脚的地方

TOP

我这个还存在一定问题 需要进一步优化
54371309[请发送:flash8会员问题]
正在更新中..070815   http://zszen.com

TOP

你这个我看完
卡死了..
我想说啥来者? 等…………我想想额`

TOP

太强了.不得不佩服佩服

TOP

发新话题